1、記錄php錯誤日誌
display_errors與log_errors的區別
display_errors
錯誤回顯,一般常用於開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可以暴露出非常多的敏感資訊,為攻擊者下一步攻擊提供便利。推薦關閉此選項。
display_errors = on
開啟狀態下,若出現錯誤,則報錯,出現錯誤提示
dispaly_errors = off
在正式環境下用這個就行了,把錯誤資訊記錄在日誌裡。正好可以關閉錯誤回顯。
對於php開發人員來說,一旦某個產品投入使用,那麼第一件事就是應該將display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連線、資料表等資訊而遭到黑客攻擊。
某個產品投入使用後,難免會有錯誤資訊,那麼如何記錄這些對開發人員非常有用的資訊呢?
將php的log_errors開啟即可,預設是記錄到web伺服器的日誌檔案裡,比如apache的error.log檔案。當然也可以記錄錯誤日誌到指定的檔案中。
# vim /etc/php.ini
display_errors = off
log_errors = on
error_log = /var/log/php_error/php-error.log
另外也可以設定error_log = syslog,使這些錯誤資訊記錄到作業系統的日誌裡。
error_reporting 設定錯誤訊息回報的等級
e_all能從不良編碼實踐到無害提示到出錯的所有資訊。e_all 對於開發過程來說有點太細,因為它在螢幕上為一些小事(例如變數未初始化)也顯示提示,會搞糟瀏覽器的輸出
最好把預設值改為:error_reporting =
e_all & ~e_notice
預設值是:e_all & ~e_deprecated & ~e_strict
php.ini中display_errors = off失效的解決
問題:
php設定檔案php.ini中明明已經設定display_errors = off,但是在執行過程中,網頁上還是會出現錯誤資訊。
解決:
經查log_errors= on,據官方的說法,當這個log_errors設定為on,那麼必須指定error_log檔案,如果沒指定或者指定的檔案沒有許可權寫入,那麼照樣會輸出到正常的輸出渠道,那麼也就使得display_errors 這個指定的off失效,錯誤資訊還是列印了出來。於是將log_errors = off,問題就解決了。
2、實現nginx中使用php-fpm時記錄php錯誤日誌的配置方法
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中的配置,如果沒有請增加:
[global]
error_log = /var/log/php_error/php-fpm.log
[www]
catch_workers_output = yes
2.修改php.ini中配置,沒有則增加:
display_errors = off
log_errors = on
error_log = /var/log/php_error/php-error.log
error_reporting=e_all&~e_notice
3.重啟php-fpm
當php執行錯誤時就能看到錯誤日誌在」
/var/log/php_error/php-fpm.log」中了
轉到nginx+php-fpm後,飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。
php-fpm.conf的配置檔案中有乙個引數request_slowlog_timeout是這樣描述的
當request_slowlog_timeout 設為乙個具體秒時request_slowlog_timeout
=5,表示如果哪個指令碼執行時間大於5秒,會記錄這個指令碼到慢日誌檔案中
request_slowlog_timeout =0表示關閉慢日誌輸出。
慢日誌檔案位置預設在php的安裝目錄下的log資料夾中,可以通過修改slowlog = log/$pool.log.slow引數來指定。
php-fpm慢日誌的例子,慢日誌會記錄下程序號,指令碼名稱,具體哪個檔案哪行**的哪個函式執行時間過長。
request_slowlog_timeout 和 slowlog需要同時設定,開啟request_slowlog_timeout的同時需要開啟
slowlog
慢日誌路徑需要手動建立
具體開啟php-fpm慢日誌步驟:
vi etc/php-fpm.conf
去掉request_slowlog_timeout 、slowlog的字首分號';',設定request_slowlog_timeout =5;
:wq儲存退出
建立慢日誌目錄
mkdir log
重啟php-fpm
kill -int `cat var/run/php-fpm.pid
sbin/php-fpm
4、所有具體步驟
1、vi php.ini
dispaly_errors = off
log_errors = on
error_log = /var/log/php_error/php-error.log
error_reporting = e_all & ~e_deprecated
& ~e_strict
2、vi php-fpm.conf
[global]
error_log = /var/log/php_error/php-fpm.log
[www]
catch_workers_output = yes
request_slowlog_timeout = 5
slowlog = /var/log/php_error/slow.log
3、mkdir /var/log/php_error
chown www:www /var/log/php_error
4、先檢測,若無報錯,則執行過載:/usr/local/php/sbin/php-fpm –t
過載:service php-fpm reload
5、檢視/var/log/php_error資料夾下是否有相應的日誌檔案生成
6、日誌輪詢 vi
/etc/logrotate.d/nginx
把日誌路徑新增上即可: /var/log/php_error/*.log
注:6具體參考:使用linux自帶的命令logrotate對nginx日誌進行切割
php全面記錄日誌 php記錄日誌
簡介 這是php記錄日誌的詳細頁面,介紹了和php,有關的知識 技巧 經驗,和一些php原始碼等。class pingjiaf frameborder 0 src scrolling no ss log level 0 ss log filename tmp ss log ss log levels...
php記錄日誌
ss log level 0 ss log filename tmp ss log ss log levels array none 0,error 1,info 2,debug 3 設定日誌級別 function ss log set level level error 記錄日誌 function...
PHP日誌記錄方法
php裡提供了乙個error log 能幫助你快捷的將日誌輸出到指定的檔案裡。這個函式的介面描述如下 bool error log string message int message type 0 string destination string extra headers 其中第乙個引數是要輸...