<?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函數將會打印出一些東西.這個東西可以包裝成一個類(不使用全局變量).
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的作用是指定當本頁面所有腳本執行完成之後執行的函數
<?php function test() { echo '創建文件'; //此處要用絕對路徑,用相對路徑即無效。原因請看後面的解釋 if($handle = fopen('D:/web_root/tx.txt',"w+")) { fwrite($handle, 'you are write after exit'); fclose($handle); } } //函數名稱無需帶括號,用引號包住即可; 當本頁面所有語句都執行完成或者超時執行test函數。 register_shutdown_function('test'); exit(); |
注意:register_shutdown_function是指在執行完所有PHP語句後再調用函數,不要理解成客戶端關閉流瀏覽器頁面時調用函數。
可以這樣理解調用條件:
1、當頁面被用戶強制停止時
2、當程序代碼運行超時時
3、當PHP代碼執行完成時