PHPモジュールがPHPにロードされないのはなぜですか?

PHPモジュールがPHPにロードされないのはなぜですか?

PHPからロードされないPHPモジュールの問題をデバッグする方法を示します。

私はApache Webサーバー、PHP v7.1、MysqlでOpenSUSE v42.2 Linuxオペレーティングシステムを使用します。

必要なPHP v7.1を提供していないので、ソースからPHP v7.1を構築しました。 PHP-FPMを使用してください。

私はそれをインストールしました

/opt/php-7.1/

php.iniは次の場所にあります。

/opt/php-7.1/lib/php.ini

opcacheがインストールされていることがわかりました。

/opt/php-7.1/lib64/extensions/no-debug-non-zts-20160303/opcache.so

php.iniを編集し、次の行を追加しました。

zend_extension=/opt/php-7.1/lib64/extensions/no-debug-non-zts-20160303/opcache.so

再起動:

systemctl restart php-7.1-fpm.service
systemctl restart apache2.service

しかし、まだ次のような結果が得られます。

php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
imap
intl
json
libxml
mbstring
mcrypt
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib

[Zend Modules]

[Zendモジュール]にopcacheがありません。

ただし、設定には「--enable-opcache」があります。

php-i | grep -i ジョブキャッシュ

設定コマンド => './configure' '--prefix=/opt/php-7.1' '--with-pdo-pgsql' '--with-zlib-dir' '--with-freetype-dir' '- -enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-intl' '--enable-calendar' '--with-curl' '--with- mcrypt' '--with-gd' '--with-pgsql' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--enable -ソケット' '--enable-sysvsem' '--enable-sysvshm' '--enable-pcntl' '--enable-mbregex' '--enable-exif' '--enable-bcmath' '--with- mhash ''--enable-zip''--with-pcre-regex''--with-pdo-mysql''--with-mysqli''--with-mysql-sock=/var/run/mysql/ mysql.sock' '--with-xpm-dir=/usr' '--with-webp-dir=/usr' '--with-jpeg-dir=/usr' '--with-png-dir=/ usr' '--enable-gd-native-ttf' '--with-openssl' '--with-fpm-user=wwwrun' '--with-fpm-group=www' '--with-libdir=lib64 ''--enable-ftp' '--with-imap' '--with-imap-ssl' '--with-kerberos' '--with-gettext' '--with-xmlrpc' '--with- xsl ''--opcacheを有効にする''--fpmを有効にする'

また、次のように指定してみました。

zend_extension=opcache

しかし、私は同じ結果を得ました。 opcacheはまだありません。

Opcacheアクティベーションを変更するには?

答え1

私の場合、影響を受けたモジュールはopcachePHPモジュールでした。

解決策:

私はphpinfoで "display_errors"ローカル値がオフになっていてデフォルト値がオンになっていることがわかりました。 Masterの値はphp.iniから取得され、その中に/opt/php-7.1/lib/php.ini""が含まれているため、display_errors = Offこのphp.iniがロードされていないことを意味します。

また、フィールド値が空であることが確認され、Loaded Configuration Filephp.iniがロードされていないことを意味します。

ただし、php.iniは次の場所にあります(そして次からロードする必要があります)/opt/php-7.1/lib/php.ini

また、phpinfoで ""が " Configuration File (php.ini) Path"に設定されていることがわかりました。/opt/php-7.1/lib64これは、php.iniが/opt/php-7.1/lib64/ディレクトリに存在する必要があることを意味します。

ステップ1の修正:

copy php.ini 
from 
/opt/php-7.1/lib/php.ini
to
/opt/php-7.1/lib64/php.ini

コマンドラインから:

cp -p /opt/php-7.1/lib/php.ini /opt/php-7.1/lib64/php.ini

また、PHPは'--with-libdir=lib64'パラメータを使用してコンパイルされることに注意してください。

これはおそらく、 "opcache.so"ファイルがこのディレクトリにあることを意味します。

/opt/php-7.1/lib64/extensions/no-debug-non-zts-20160303/現在、 "opcache.so"は ""ディレクトリにあります。私の考えでは、「opcache.so」を「/opt/php-7.1/lib64/extensions/」に配置するだけで十分だと思います。これが最終的な解決策になりました。

2段階修正:

copy opcache.a & opcache.so
from 
/opt/php-7.1/lib64/extensions/no-debug-non-zts-20160303/
to
/opt/php-7.1/lib64/extensions/

コマンドラインから:

cp -p /opt/php-7.1/lib64/extensions/no-debug-non-zts-20160303/opcache.* /opt/php-7.1/lib64/extensions/

3段階修正:

ApacheとPHP-FPMを再起動します(オプション、使用されている場合):

service apache2 restart
service php-7.1-fpm restart

この3つの回復手順を完了した後のPHP opcache module is loaded successfully

結果:

php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
imap
intl
json
libxml
mbstring
mcrypt
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

関連情報