今天發現php中,如果要記錄fatal error的時候,可以實用一個不錯的函數,
叫register_shutdown_function,小結如下:
register_shutdown_function可以讓我們設定一個當執行關閉時可以被調用的另一個函數.也就是說當我們的指令碼執行完成或意外死掉 導致PHP執行即將關閉時,我們的這個函數將會被調用.所以,我們可以使用在指令碼開始處設定一個變數為false,然後在指令碼末尾將之設定為true的方 法,讓PHP關閉回呼函數檢查指令碼完成與否. 如果我們的變數仍舊是false,我們就知道指令碼的最後一行沒有執行,因此它肯定在程式執行到某處死掉了;
例子如下:
- ?php
- $clean = false;
- function shutdown_func(){
- global $clean;
- if (!$clean){
- die("not a clean shutdown");
- }
- return false;
- }
- register_shutdown_function("shutdown_func");
- $a = 1;
- $a = new FooClass(); // 將因為致命錯誤而失敗
- $clean = true;
- ?>
- 再來一個記錄fatal error的例子
- function catch_fatal_error()
- {
- $last_error = error_get_last();
- // 檢查是否屬於fatal_error
- if(isset($last_error['type']) &&$last_error['type']==E_ERROR)
- {
- //相關的處理
- }
- }
- register_shutdown_function('catch_fatal_error');
注意的是;
1,register_shutdown_function()函數可重複調用,但執行的順序與註冊的順序相同
2,如果在調用register_shutdown_function()函數之前有exit()函數調用,register_shutdown_function()函數將不能執行
3,PHP4後支援註冊函數參數傳遞
4,在某些服務端,如Apache,目前的目錄在register_shutdown_function()函數中能夠改變
5,register_shutdown_function()函數執行在headers發送之後
本文連結http://www.cxybl.com/html/wlbc/Php/20130318/37221.html