記一次修改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這個不錯的東西,後面再研究下。