php中register_shutdown_function函數用法詳解:
由于程序出現一些不可預知的問題,給用戶顯示一個致命錯誤,又或者一個空白頁(在display_errors設為off的情況下),不是一個很好的處理方法 . PHP中有一個叫做 register_shutdown_function 的函數,可以讓我們設置一個當執行關閉時可以被調用的另一個函數.也就是說當我們的腳本執行完成或意外死掉導致PHP執行即將關閉時,我們的這個函數將會 被調用.所以,我們可以使用在腳本開始處設置一個變量為false,然后在腳本末尾將之設置為true的方法,讓PHP關閉回調函數檢查腳本完成與否. 如果我們的變量仍舊是false,我們就知道腳本的最后一行沒有執行,因此它肯定在程序執行到某處死掉了.我準備了一個非常基本的例子,可以演示在一個致 命錯誤需要顯示時,你應該怎么給用戶一些合適的反饋.你可以通過關閉致命錯誤的顯示(譯注:可以設置display_errors和 error_reporting),讓例子看起來好看些.
<?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;?>
正如你所看到,如果關閉回調函數運行時,clean變量沒有被設為 true,shutdown_func函數將會打印出一些東西.這個東西可以包裝成一個類(不使用html' target='_blank'>全局變量).
PHP提供register_shutdown_function()這個函數,能夠在腳本終止前回調注冊的函數,也就是當 PHP 程序執行完成后執行的函數。
例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>register_shutdown_function示例</title></head><body><?php$starttime=microtime(true);function Test(){$starttime=microtime(true);if(!file_exists("Test.txt")) { //判斷如果文件不存在!!$Str = fopen("Test.txt","w+");fwrite($Str," 我是在最后寫進來的.時間:$starttime");fclose($Str);echo "創建完成!創建時間:$starttime";}else { //如果存在;echo "文件已經存在";}}register_shutdown_function("Test");echo "程序開始:".$starttime."<br>";for($i=0;$i<1000;$i++){echo "Echo<br/>";}exit;?></body></html>register_shutdown_function的作用是指定當本頁面所有腳本執行完成之后執行的函數。<?phpfunction aaa() {echo "創建文件";if($ttt = fopen("D:/web_root/tx.txt","w+")) //此處要用絕對路徑,用相對路徑即無效。原因請看后面的解釋{fwrite($ttt,"you are write after exit");fclose($ttt);}}register_shutdown_function("aaa"); // 函數名稱無需帶括號,用引號包住即可。 當本頁面所有語句都執行完成,或者超時時aa函數。exit();?>
register_shutdown_function 執行機制是:PHP把要調用的函數調入內存。當頁面所有PHP語句都執行完成時,再調用此 函數。注意,在這個時候從內存中調用,不是從php頁面中調用,所以上面的例子不能使用相對路徑,因為php已經當原來的頁面不存在了。就沒有什么相對路 徑可言。 www.it165.net
注意:register_shutdown_function 是指在執行完所有PHP語句后再調用函數,不要理解成客戶端關閉流瀏覽器頁面時調用函數。
可以這樣理解調用條件:
1、當頁面被用戶強制停止時
2、當程序代碼運行超時時
3、當PHP代碼執行完成時
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答