前言
想给公司的测试环境装一个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的扩展目录下,我的如下:
安装过程如下:
按照上述方式,我的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的路径。
结果,看到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的
结果,发现以下的一段输出:
去默认打开了/usr/local/php/lib/下的php.ini,并且没有发现此文件。
于是,我把/usr/local/php/etc/下的php.ini移到此目录下,再次执行strace命令,结果如下:
配置文件找到了,于是,重启php-fpm,再看下phpinfo()的内容
哈哈哈,xdebug有了。再看加载配置文件,也有值了。
五、总结
之前安装php都是用的lnmp平台一键安装,结果测试环境的php是独立编译安装的,应该是由于编译安装的配置的问题造成了没有找到php.ini。经过这次,也让我发现strace这个不错的东西,后面再研究下。