PHP register_shutdown_function函數(shù)的深入解析
更新時間:2013年06月03日 17:18:20 作者:
本篇文章是對PHP register_shutdown_function函數(shù)進行了詳細的分析介紹,需要的朋友參考下
腳本時常死掉,而且并不總是那么好看. 我們可不想給用戶顯示一個致命錯誤,又或者一個空白頁(在display_errors設為off的情況下) . PHP中有一個叫做 register_shutdown_function 的函數(shù),可以讓我們設置一個當執(zhí)行關閉時可以被調(diào)用的另一個函數(shù).也就是說當我們的腳本執(zhí)行完成或意外死掉導致PHP執(zhí)行即將關閉時,我們的這個函數(shù)將會 被調(diào)用.所以,我們可以使用在腳本開始處設置一個變量為false,然后在腳本末尾將之設置為true的方法,讓PHP關閉回調(diào)函數(shù)檢查腳本完成與否. 如果我們的變量仍舊是false,我們就知道腳本的最后一行沒有執(zhí)行,因此它肯定在程序執(zhí)行到某處死掉了.我準備了一個非?;镜睦?可以演示在一個致 命錯誤需要顯示時,你應該怎么給用戶一些合適的反饋.你可以通過關閉致命錯誤的顯示(譯注:可以設置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;
?>
正如你所看到,如果關閉回調(diào)函數(shù)運行時,clean變量沒有被設為true,shutdown_func函數(shù)將會打印出一些東西.這個東西可以包裝成一個類(不使用全局變量).
PHP提供register_shutdown_function()這個函數(shù),能夠在腳本終止前回調(diào)注冊的函數(shù),也就是當 PHP 程序執(zhí)行完成后執(zhí)行的函數(shù)。
register_shutdown_function 執(zhí)行機制是:PHP把要調(diào)用的函數(shù)調(diào)入內(nèi)存。當頁面所有PHP語句都執(zhí)行完成時,再調(diào)用此 函數(shù)。注意,在這個時候從內(nèi)存中調(diào)用,不是從PHP頁面中調(diào)用,所以上面的例子不能使用相對路徑,因為PHP已經(jīng)當原來的頁面不存在了。就沒有什么相對路 徑可言。
注意:register_shutdown_function 是指在執(zhí)行完所有PHP語句后再調(diào)用函數(shù),不要理解成客戶端關閉流瀏覽器頁面時調(diào)用函數(shù)。
可以這樣理解調(diào)用條件:
1、當頁面被用戶強制停止時
2、當程序代碼運行超時時
3、當PHP代碼執(zhí)行完成時,代碼執(zhí)行存在異常和錯誤、警告
復制代碼 代碼如下:
<?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;
?>
正如你所看到,如果關閉回調(diào)函數(shù)運行時,clean變量沒有被設為true,shutdown_func函數(shù)將會打印出一些東西.這個東西可以包裝成一個類(不使用全局變量).
PHP提供register_shutdown_function()這個函數(shù),能夠在腳本終止前回調(diào)注冊的函數(shù),也就是當 PHP 程序執(zhí)行完成后執(zhí)行的函數(shù)。
register_shutdown_function 執(zhí)行機制是:PHP把要調(diào)用的函數(shù)調(diào)入內(nèi)存。當頁面所有PHP語句都執(zhí)行完成時,再調(diào)用此 函數(shù)。注意,在這個時候從內(nèi)存中調(diào)用,不是從PHP頁面中調(diào)用,所以上面的例子不能使用相對路徑,因為PHP已經(jīng)當原來的頁面不存在了。就沒有什么相對路 徑可言。
注意:register_shutdown_function 是指在執(zhí)行完所有PHP語句后再調(diào)用函數(shù),不要理解成客戶端關閉流瀏覽器頁面時調(diào)用函數(shù)。
可以這樣理解調(diào)用條件:
1、當頁面被用戶強制停止時
2、當程序代碼運行超時時
3、當PHP代碼執(zhí)行完成時,代碼執(zhí)行存在異常和錯誤、警告
您可能感興趣的文章:
- php ignore_user_abort與register_shutdown_function 使用方法
- PHP register_shutdown_function()函數(shù)的使用示例
- php中__destruct與register_shutdown_function執(zhí)行的先后順序問題
- PHP中使用register_shutdown_function函數(shù)截獲fatal error示例
- PHP錯誤處理函數(shù)register_shutdown_function使用示例
- php register_shutdown_function函數(shù)詳解
- PHP中register_shutdown_function函數(shù)的基礎介紹與用法詳解
相關文章
基于thinkPHP類的插入數(shù)據(jù)庫操作功能示例
這篇文章主要介紹了基于thinkPHP類的插入數(shù)據(jù)庫操作功能,結(jié)合實例形式分析了thinkPHP數(shù)據(jù)庫操作的常用技巧,需要的朋友可以參考下2017-01-01PHP實現(xiàn)AJAX動態(tài)網(wǎng)頁及相關函數(shù)詳解
ajax其實是利用javascript向服務器請求數(shù)據(jù),然后局部修改頁面,下面這篇文章主要給大家介紹了關于PHP實現(xiàn)AJAX動態(tài)網(wǎng)頁及相關函數(shù)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08PHP+Mysql+jQuery文件下載次數(shù)統(tǒng)計實例講解
這篇文章主要內(nèi)容是關于PHP+Mysql+jQuery文件下載次數(shù)統(tǒng)計實例講解2015-10-10YII Framework框架使用YIIC快速創(chuàng)建YII應用之migrate用法實例詳解
這篇文章主要介紹了YII Framework框架使用YIIC快速創(chuàng)建YII應用之migrate用法,詳細分析了migrate的功能與用法,并給出創(chuàng)建登錄后臺的實例講述了migrate的相關使用技巧,需要的朋友可以參考下2016-03-03ThinkPHP 3.2.3實現(xiàn)加減乘除圖片驗證碼
這篇文章主要為大家詳細介紹了ThinkPHP 3.2.3實現(xiàn)加減乘除圖片驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12