關於PHP錯誤日誌踩過的一些坑

2021-10-03 12:06:13 字數 2363 閱讀 3277

關於php錯誤日誌踩過的一些坑

ddaidai

0.286

2017.08.09 15:45:43

字數 1,009

閱讀 3,534

對於線上的專案來說,錯誤日誌和訪問日誌是至關重要的。學會如何分析日誌找出問題是乙個必備技能。本文就談談關於php的錯誤日誌那些事。

phpinfo() 中 local value(區域性變數)master value(主變數) 的區別

首先說說這兩個東西,

phpinfo() 的很多部分有兩個column:local value和master value

master value是php.ini檔案中的內容.

2.local value 是當前目錄中的設定,這個值會覆蓋master value中對應的值

由於web sever config或.htaccess的設定,或程式中ini_set()的設定,當前目錄中的設定會不同於php.ini文 件中的設定

ps:apache的配置檔案中可以重寫php.ini的設定,可能在conf/httpd.conf,也可能在》conf.d/***.conf中,一般在conf.d/php.conf中

理解上面兩個東東了再來說說關於錯誤日誌的配置問題

nginx是乙個web伺服器,因此nginx的access日誌只有對訪問頁面的記錄,不會有php 的 error log資訊。

nginx把對php的請求發給php-fpm fastcgi程序來處理,預設的php-fpm只會輸出php-fpm的錯誤資訊,在php-fpm的errors log裡也看不到php的errorlog

原因是php-fpm的配置檔案php-fpm.conf中預設是關閉worker程序的錯誤輸出,直接把他們重定向到/dev/null,所以我們在nginx的error log 和php-fpm的errorlog都看不到php的錯誤日誌。

除錯起來就很痛苦了。解決nginx下php-fpm不記錄php錯誤日誌的辦法:

1.修改php-fpm.conf中配置 沒有則增加

catch_workers_output = yes //記錄錯誤日誌到php-fpm中

error_log = log/error_log //錯誤日誌存放位置

2.修改php.ini中配置,沒有則增加

log_errors = on

error_log = 「/usr/local/lnmp/php/var/log/error_log」

error_reporting=e_all&~e_notice

3.重啟php-fpm,當php執行錯誤時就能看到錯誤日誌在"/usr/local/lnmp/php/var/log/error_log"中了

請注意:

這裡是坑點:

php-fpm.conf 中的php_admin_value[error_log] 引數 會覆蓋php.ini中的 error_log 引數,所以確保你在phpinfo()中看到的最終error_log檔案具有可寫許可權並且沒有設定php_admin_value[error_log] 引數,否則錯誤日誌會輸出到php-fpm的錯誤日誌裡

2.找不到php.ini位置,使用php的phpinfo()結果檢視

也可以在命令列用這個命令檢視ini位置:

php -i | grep php.ini

檢視error_log位置

php -i | grep error_log

這裡又是乙個需要注意的地方:如何將php的錯誤日誌輸出到nginx的錯誤日誌裡

在php 5.3.8及之前的版本中,通過fastcgi執行的php,在使用者訪問時出現錯誤,會首先寫入到php的errorlog中,如果php的errorlog無法寫入,則會將錯誤內容返回給fastcgi介面,然後nginx在收到fastcgi的錯誤返回後記錄到了nginx的errorlog中

在php 5.3.9及之後的版本中,出現錯誤後php只嘗試寫入php的errorlog中,如果失敗則不會再返回到fastcgi了,錯誤日誌會輸出到php-fpm的錯誤日誌裡。所以如果想把php錯誤日誌輸出到nginx錯誤日誌,需要使用php5.3.8之前的版本,並且配置檔案中php的error_log對於php worker程序不可寫

最後再強調一次:

如果錯誤日誌沒有寫入到檔案,檢視www使用者對php_admin_value[error_log]的路徑是否有寫入許可權

php_flag 修改php.ini中的配置 開關形式on或off 可以被ini_set修改

php_value 修改php.ini中的配置 value形式 可以被ini_set修改

php_admin_flag 修改php.ini中的配置 開關形式on或off 不可以被ini_set修改

php_admin_value 修改php.ini中的配置 value形式 不可以被ini_set修改

關於PHP效能提公升踩過的一些坑

效能這個東西,在 規模到達一定程度後,會是乙個永恆的主題。關於這方面,本人有一些拙見,現在拿出來,大家一起 下。1 編碼過程中,傳遞引數時,盡量少使用 引用傳參 這是乙個巨坑啊。我們要了解,php所以來的技術模型是什麼?寫時複製 copy on write 好吧啦。當你使用 引用傳參 的時候,你的那...

安裝ubuntu server 踩過的一些坑記錄

環境介紹 有獨立顯示卡 有裝 win10 系統 順序不代表執行時的順序 遇到的第乙個問題 我把顯示器的 vga 插到了 主機板的核顯上,導致畫面無法顯示 怎麼解決的 因為有裝獨立顯示卡,所以自然是裝到獨立顯示卡上咯 遇到的第二個問題 u盤裡面的 ubuntu server 怎麼裝啊?怎麼解決的 需要...

vue開發元件時踩過的一些坑

近期又完成乙個vue專案,公司好像十分看好vue框架,之後的幾個專案也準備使用vue框架。然而回想起之前,使用vue開發元件時遇到的各種bug,心中一陣後怕。在此記錄下那些填坑的歷程,方便以後查閱。input輸入出現白屏問題 專案要求header部分固定,main部分可以滾動,css3實現main的...