程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 詳解PHP錯誤日志的獲取方法,詳解php日志獲取

詳解PHP錯誤日志的獲取方法,詳解php日志獲取

編輯:關於PHP編程

詳解PHP錯誤日志的獲取方法,詳解php日志獲取


在PHP中錯誤日志的獲取方法有很多種,下面我給大家簡單介紹下遇到此類問題如何解決,下面通過代碼給大家展示下,希望能夠幫助到大家。

<?php
error_reporting (0);
register_shutdown_function($err = 'my_error_handler') OR set_error_handler($err,E_ALL); // 同時注冊兩個函數.
// 函數參數錯誤
$original = unserialize ( array(423142,2134234));
// 不可對0除
echo 1/0;
// 不存在的數組索引
echo $_GET['aa'];
// 不存在的常量
PHP_E;
// 不存在的變量
echo $var;
// 函數參數錯誤
strlen(array(2434));
// 函數參數錯誤
md5(array(1));
// 用戶自定義錯誤
trigger_error('safdds',E_USER_NOTICE);
// 不存在的函數 php中斷
// tes();
// 不存在的方法 php中斷
$ts = new afsd();
function my_error_handler($errno=0 ,$errstr=0 , $errfile=0 ,$errline=0){
 if($errno && $errfile){
  if(true){
   $earr = array();
   $earr['type'] = $errno;
   $earr['message'] = $errstr;
   $earr['file'] = $errfile;
   $earr['line'] = $errline;
  }
 }else{
  $earr = error_get_last();
 }
 echo '<pre>';
 print_r($earr);
 return array();
}

對於php錯誤, 我們一定要認識清楚, 類型分幾種, 什麼時候觸發, 返回值是什麼.

如果不區分警告, 錯誤, 建議,提示等細類型種類, 那我們可以理解php錯誤類型共有兩種:

   一種是強制中斷程序錯誤.  如錯誤, 方法不存在等. 內存不足, 超時

   一種是非中斷式錯誤. 如警告, 提示這些

其中獲取中斷程序錯誤需要使用register_shutdown_function函數, 注冊一個內存函數, 然後裡面取得錯誤信息, 這種方法僅能獲取到首次的錯誤行, 如多個不存在的函數時, 它只能獲取到首次的那個錯誤. 這其實也有好處, 你修復一個, 它就會移至下一個.

非中斷式錯誤, 如果用:register_shutdown_function, 那會變得異常難操作, 僅僅能獲取首次的提示或者警告, 這時我們需要set_error_handler, 每一次觸有error level constants, 都會調用錯誤函數一次, 也就可以在裡面獲取錯誤日志.  不過此函數會承接 error_get_last 函數, 所以你會發現error_get_last返回為空, 全部由參數傳入了.

兩個函數一起運用, 即可獲取到程序的99%的錯誤, 這對於php程序來說, 算是雪中送打火機了.

試試運行上面的示例吧.

通過代碼和文字相結合對PHP中錯誤日志的獲取方法的整理,希望對大家在今後的工作中遇到此類問題有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved