PHP 모듈이 PHP에 로드되지 않는 이유는 무엇입니까?

PHP 모듈이 PHP에 로드되지 않는 이유는 무엇입니까?

PHP에서 로드되지 않는 PHP 모듈 문제를 디버깅하는 방법을 보여줍니다.

저는 Apache 웹 서버, 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

관련 정보