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
제 경우에는 영향을 받은 모듈이 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" 파일이 이 디렉토리에 있다는 의미일 것입니다.
/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