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

PHP register_shutdown_function函數詳解

編輯:關於PHP編程

腳本時常死掉,而且並不總是那麼好看. 我們可不想給用戶顯示一個致命錯誤,又或者一個空白頁(在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函數將會打印出一些東西.這個東西可以包裝成一個類(不使用全局變量).
 
  PHP提供register_shutdown_function()這個函數,能夠在腳本終止前回調注冊的函數,也就是當PHP 程序執行完成後執行的函數。
 
  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); www.phperz.com 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>"; phperz~com for($i=0;$i<1000;$i++){ echo "Echo<br/>"; } exit; ?> </body> </html>
 
  register_shutdown_function的作用是指定當本頁面所有腳本執行完成之後執行的函數。
 
  <?php
 
  function 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已經當原來的頁面不存在了。就沒有什麼相對路 徑可言。

 

 

 


 
  注意:register_shutdown_function 是指在執行完所有php語句後再調用函數,不要理解成客戶端關閉流浏覽器頁面時調用函數。


 
  可以這樣理解調用條件:
 
  1、當頁面被用戶強制停止時
 
  2、當程序代碼運行超時時
 
  3、當PHP代碼執行完成時
摘自 天天笑一下

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