詳解PHP錯誤記錄檔的擷取方法_php技巧

來源:互聯網
上載者:User

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

<?phperror_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中錯誤記錄檔的擷取方法的整理,希望對大家在今後的工作中遇到此類問題有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.