Показываю мой случай, как отладить проблему, что модуль PHP не загружен в PHP.
Я использую ОС Linux OpenSUSE v42.2 с веб-сервером Apache, 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
Я обнаружил, что 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]
Opcache отсутствует в [Zend Modules].
Но в configure есть '--enable-opcache':
php -i | grep -i opcache
Настроить команду => './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-optimisation '' --with-bz2 '' --with-zlib '' --enable -sockets '' --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 '' --enable-opcache '' --enable-fpm '
Я также пытался указать как:
zend_extension=opcache
но я получил тот же результат, opcache все еще отсутствует.
Как исправить, чтобы opcache был включен?
В моем случае затронутый модуль был opcache
Модуль PHP.
Решение:
Я заметил, что внутри phpinfo локальное значение display_errors было ВЫКЛЮЧЕНО, а главное - включено. Поскольку значение Master берется из php.ini, а в /opt/php-7.1/lib/php.ini
было "display_errors = Off
", это означает, что этот php.ini не загружен.
Также обнаружено, что "Loaded Configuration File
"значение поля пусто, поэтому также показывает, что php.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.
В настоящее время opcache.so находится в каталоге: "/opt/php-7.1/lib64/extensions/no-debug-non-zts-20160303/
". Я предполагал разместить 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
После выполнения этих трех шагов исправления 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
Вы должны указать имя модуля, например:
zend_extension=opcache