1. 程式人生 > >記一次修改php.ini不生效的踩坑之旅

記一次修改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的擴充套件目錄下,我的如下:

安裝過程如下:

按照上述方式,我的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這個不錯的東西,後面再研究下。