为什么PHP模块没有加载到PHP中



向我展示如何调试PHP模块未加载到PHP中的问题。

我使用OpenSUSE v42.2Linux操作系统,带有Apache Web服务器、PHP v7.1和Mysql。

因为它没有提供我需要的PHP v7.1,所以我从源代码构建了PHP v7.1。使用PHP-FPM。

我把它安装到

/opt/php-7.1/

php.ini位于:

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

我发现,操作缓存已安装到

/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 Modules]中缺少操作缓存。

但在配置中有"--enable opcache":

php-i|grep-i操作缓存

配置命令=>'/配置"--prefix=/opt/php-7.1"--使用pdo pgsql"--用zlib dir"--用freetype dir""--启用mbstring"--使用libxml dir=/usr/"--启用soap"--enable intl"--enable calendar"--with curl"--with mcrypt"--使用gd"--使用pgsql"--禁用rpath"--启用内联优化"--使用-bz2"--通过zlib"--启用套接字"--启用sysvsem"--禁用sysvshm"--启用pcntl"--启用mbregex"--允许exif"--支持bcmath"--使用mhash"--启用zip"--使用pcre regex"--用pdo-mysql"--使用mysqli"--使用mysql sock=/var/run/mysql/mysql.sock'"--带有xpm dir=/usr/"--带有webp dir=/usr"--带jpeg dir=/ur"--使用png dir=/usr/"--启用gd本机ttf"--使用openssl"--带有fpm user=wwwrun"--带有fpm group=www"--带libdir=lib64"--启用ftp"--带有imap"--具有imap ssl"--带kerberos"--带有gettext"--带有xmlrpc"--带xsl"--enable opcache"'-启用fpm'

我还试图指定为:

zend_extension=opcache

但我得到了同样的结果,仍然缺少opcache。

如何修复启用了操作缓存?

在我的案例中,受影响的模块是opcachePHP模块。

解决方案:

我注意到,在phpinfo中;display_errors";本地值为OFF,主值为ON。因为Master值来自php.ini,并且在/opt/php-7.1/lib/php.ini中有";CCD_ 3";,这意味着这个php.ini没有被加载。

还发现;CCD_ 4";字段值为空,因此它还显示php.ini未加载。

但是php.ini位于(并且应该从中加载(:/opt/php-7.1/lib/php.ini

此外,我注意到,在phpinfo中;CCD_ 6";被设置为:";CCD_ 7";因此,这意味着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";文件应该在此目录下找到。

目前";opcache.so";位于目录"中;CCD_ 10";。我想把";opcache.so";至";CCD_ 11";就足够了。这成为了最终的解决方案。

第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个修复步骤后,PHPopcache 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

最新更新