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
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"中了
請注意:
1. 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()結果檢視
3.如何修改php錯誤日誌不輸出到頁面或螢幕上
修改php.ini
display_errors = off //不顯示錯誤資訊(不輸出到頁面或螢幕上)
log_errors = on //記錄錯誤資訊(儲存到日誌檔案中)
error_reporting = e_all //捕獲所有錯誤資訊
error_log = //設定日誌檔名
程式中修改以上配置
ini_set("display_errors",0)
ini_set("error_reporting",e_all); //這個值好像是個php的常量
ini_set("error_log","《日誌檔名》")
ini_set("log_errors",1);
4.如何將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程序不可寫...
nginx php fpm 輸出php錯誤日誌
nginx是乙個web伺服器,因此nginx的access日誌只有對訪問頁面的記錄,不會有php 的 error log資訊。nginx把對php的請求發給php fpm fastcgi程序來處理,預設的php fpm只會輸出php fpm的錯誤資訊,在php fpm的errors log裡也看不到...
nginx php fpm安裝手記
www 將www加入www組並禁止www登入shell 編譯前編輯src core nginx.h找到 define nginx version define nginx version define nginx ver define nginx var 將上邊資訊替換為你想替換的資訊,便於隱藏ng...
nginx php fpm 執行原理
目錄 cgicgi工作原理 fastcgi php fpm php內建的一種fast cgi 請求步驟 common gateway inte ce 公共閘道器介面 請求模式 web brower 瀏覽器 通過http協議傳輸 http server 伺服器nginx apache cgi prog...