lnmpphp重啟沒有載入正確php.ini檔案

技術小阿哥發表於2017-11-27

早上修改了php的配置檔案,php-fpm.conf,重啟nginx,php-fpm後發現網站啟動不來了。nginx錯誤日誌為:

1
2
2015/09/18 10:11:30 [error] 15081#0: *1073 FastCGI sent in stderr: "PHP message: PHP Warning:  require_once(Zend/Application.php): failed to open stream: No such file or directory in /web/www.XXX.com/wwwroot/public/index.php on line 18
PHP message: PHP Fatal error:  require_once(): Failed opening required `Zend/Application.php` (include_path=`/web/www.XXX.com/wwwroot/library:.:/usr/local/lib/php`in /web/www.XXX.com/wwwroot/public/index.php on line 18" while reading response header from upstream, client: xxx.19.116.133, server: www.XXX.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/usr/local/php/var/run/www.XXX.com.socket:", host: "www.XXX.com"

通過好長時間的分析,是php.ini裡面的zend配置沒有生效,因此有可能是php.ini檔案沒有被載入。

首先檢查PHP的編譯引數

1
2
[huwei@xxx ~]$ /usr/local/php/bin/php -i|grep configure
Configure Command =>  `./configure`  `--prefix=/usr/local/php` `--with-config-file-path=/usr/local/php/etc` `--with-mysql=/usr/local/mysql` `--with-mysqli=/usr/local/mysql/bin/mysql_config` `--with-mysql-sock=/tmp/mysql.sock` `--with-pdo-mysql=/usr/local/mysql` `--with-gd` `--enable-libxml` `--enable-xml` `--enable-bcmath` `--enable-shmop` `--enable-sysvsem` `--enable-inline-optimization` `--with-curlwrappers` `--enable-mbregex` `--enable-fpm` `--enable-mbstring` `--enable-ftp` `--enable-gd-native-ttf` `--with-openssl` `--enable-pcntl` `--enable-sockets` `--with-xmlrpc` `--enable-zip` `--enable-soap` `--without-pear` `--with-gettext` `--enable-session` `--with-mcrypt` `--with-curl` `--enable-ctype` `--with-freetype-dir`

–with-freetype-dir引數是後面重新編譯新增的引數,也就是說,PHP經歷過兩次編譯.

檢視php的php.ini檔案預設路徑:

1
2
3
[huwei@xxx ~]$ /usr/local/php/bin/php -i|grep php.ini
Configuration File (php.ini) Path => /usr/local/php/etc
Loaded Configuration File => /usr/local/lib/php.ini

由此可以看出,此時php預設載入的php.ini檔案存在路徑是:/usr/local/lib/php.ini

而我的正確的php.ini檔案存在路徑為:/usr/local/php/etc/php.ini

經檢查,/usr/local/lib/php.ini的確沒有配置zend擴充套件,因此網站無法啟動.

cp /usr/local/php/etc/php.ini /usr/local/lib/php.ini

將php.ini檔案覆蓋過去,重啟php-fpm,網站OK

或者使用命令直接載入php.ini檔案

1
[root@test31 etc]# /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini

解決問題



思考:php檔案:php-fpm.conf php.ini兩個檔案,php-fpm.conf是 php-fpm程式服務的配置檔案

php.ini是php執行核心配置檔案,也是php擴充套件的配置檔案,比如

1
2
3
extension=memcache.so
extension=yaf.so
extension=redis.so

在php.ini裡面將擴充套件內容配置才能生效.

因此本案件中,zend擴充套件沒有生效,就可以查詢php.ini檔案是否生效.


本文轉自 yawei555 51CTO部落格,原文連結:http://blog.51cto.com/huwei555/1696041,如需轉載請自行聯絡原作者


相關文章