记一次修改php.ini不生效的踩坑之旅

前言

想给公司的测试环境装一个xdebug,按照以往的方式(之前已经装过很多次了),编译安装了xdebug,然后修改php.ini,将xdebug扩展加进去,可是,不论怎么改,都不生效,xdebug就是没有。

首先,我想到的是xdebug版本不对,由于之前有过这种经验,xdebug安装了,结果由于版本的问题,导致没有扩展没有加载成功。可是,我的xdebug版本是从xdebug官网解析而来,版本应该没有问题才多。

然后,我想到了,是不是由于php.ini路径不对,我修改错了php.ini。结果,真的是这个原因。

下面详细讲解下,我这次的踩坑之旅。

一、安装xdebug

下面简单介绍下我安装xdebug的过程。

先phpinfo()打印出php环境的信息,再到https://xdebug.org/wizard.php去解析phpinfo的内容,找到合适的xdebug版本,然后下载版本,上传到服务器后再安装,然后将生成的xdebug.so放到php的扩展目录下,我的如下:

安装过程如下:

记一次修改php.ini不生效的踩坑之旅_第1张图片

按照上述方式,我的xdebug安装完了。

二、修改php.ini

然后,修改php.ini,我的php安装目录在/usr/local/php下,php.ini在/usr/local/php/etc/php.ini下,于是打开php.ini,将如下一段配置加入php.ini中:

[XDebug]
zend_extension = "xdebug.so"
;启用性能检测分析
;xdebug.profiler_enable=pff
;;启用代码自动跟踪
;xdebug.auto_trace=off
;;允许收集传递给函数的参数变量
;xdebug.collect_params=On
;;允许收集函数调用的返回值
;xdebug.collect_return=On
;;指定堆栈跟踪文件的存放目录
;xdebug.trace_output_dir=""
;;指定性能分析文件的存放目录
;xdebug.profiler_output_dir=""
;xdebug.profiler_output_name = "cachegrind.out.%p"
xdebug.remote_connect_back = 1
xdebug.remote_enable = On
xdebug.remote_port=9000
xdebug.remote_handler = dbgp
;; xdebug.remote_host = 0.0.0.0
;xdebug.var_display_max_depth = 10
xdebug.idekey=PHPSTORM
;xdebug.remote_autostart = 1

当然,这只是,我的配置,根据不同的需求,配置是不一样的。然后重启php

service php-fpm restart

再看phpinfo()的内容,还是没有xdebug。

三、找问题

就像我前言所说,我首先怀疑xdebug版本不对,但是很快被我否决了,然后我怀疑配置写的不对,可是这次的配置跟以往做的都是一样的,应该没有问题,最后,我怀疑我改错了php.ini。

于是,我修改了这个文件的php.ini中的upload_max_filesize的值,改为了200M(默认是2M),重启php-fpm,再次查看phpinfo()的内容,upload_max_filesize的值还是2M,根本没有成功。

看来,确实是改错了php.ini,于是,我搜索了服务器上的php.ini,看还有哪些文件。

find / -name php.ini

结果只有一个,就是/usr/local/php/etc/下的那个文件。我靠,这就绝望了,php.ini只有一个,可是修改了却不生效。

然后,我换了一个思路,到phpinfo()里面去看php.ini的路径。

记一次修改php.ini不生效的踩坑之旅_第2张图片

结果,看到configure Command里面有个--with-config-file-path=/etc,然后我想是不是把php.ini放到这个目录下就可以了,于是copy过去,重启,然并卵。

再看phpinfo()的内容,发现下面有个loaded Configuration File,我的输出居然是none,意味着没有加载php.ini。那可咋整。下面就轮到strace出场了。

四、strace查故障

通过网上查找资料,发现有个strace的工具可以跟踪系统执行,解决此类问题。

当然,首先得安装strace,我的是debian系统,用sudo apt-get install strace就可以安装。

安装完后,执行以下命令来跟踪php-fpm的执行过程。

cd /usr/local/php/sbin/;        //我的php-fpm所在位置
strace php-fpm -i 2>1.log        //跟踪php-fpm执行过程,结果写入1.log
cat 1.log|grep ini                //结果中搜索有ini的

结果,发现以下的一段输出:

记一次修改php.ini不生效的踩坑之旅_第3张图片

去默认打开了/usr/local/php/lib/下的php.ini,并且没有发现此文件。

于是,我把/usr/local/php/etc/下的php.ini移到此目录下,再次执行strace命令,结果如下:

配置文件找到了,于是,重启php-fpm,再看下phpinfo()的内容

记一次修改php.ini不生效的踩坑之旅_第4张图片

哈哈哈,xdebug有了。再看加载配置文件,也有值了。

五、总结

之前安装php都是用的lnmp平台一键安装,结果测试环境的php是独立编译安装的,应该是由于编译安装的配置的问题造成了没有找到php.ini。经过这次,也让我发现strace这个不错的东西,后面再研究下。

你可能感兴趣的:(PHP)