我們?cè)谧鲰?xiàng)目時(shí),偶爾會(huì)因?yàn)椴恢?jǐn)慎而出現(xiàn)fatal error。如果display_errors設(shè)置成off,那用戶將會(huì)看到的是一個(gè)空白的頁(yè)面。若設(shè)置成了on,那fatal error的信息將會(huì)呈現(xiàn)出來(lái)(當(dāng)然正常的人都不會(huì)這樣干)。
那我們有什么方法可以提前截獲到fatal error,并用我們自己自定義的友好形式反饋給用戶呢。PHP中有一個(gè)叫做 register_shutdown_function 的函數(shù),可以讓我們?cè)O(shè)置一個(gè)當(dāng)執(zhí)行關(guān)閉時(shí)可以被調(diào)用的另一個(gè)函數(shù).也就是說當(dāng)我們的腳本執(zhí)行完成或意外死掉導(dǎo)致PHP執(zhí)行即將關(guān)閉時(shí),這個(gè)函數(shù)將會(huì)被調(diào)用。
下面請(qǐng)看一個(gè)例子:
- <?php
- $flag = false;
- function deal_error(){
- global $flag;
- if (!$flag){
- die("粗問題啦,請(qǐng)稍后再試");
- }
- return false;
- }
- register_shutdown_function("deal_error");
- //將因?yàn)橹旅e(cuò)誤而失敗
- //$obj = new NotExistClass(); //引入未定義的類
- require('./test.php');
- $flag = true;
我們?cè)诔绦蛉肟谔帲O(shè)置flag為false,最后設(shè)置成true,表明程序正常執(zhí)行。若flag最后不為true,說明在中間某個(gè)地方死掉了,此時(shí)就會(huì)調(diào)用register_shutdown_function,輸出我們自定義的錯(cuò)誤結(jié)果。
如上面的類未定義、引入不存在的文件(必須使用require或require_once)等會(huì)導(dǎo)致fatal error。當(dāng)然,要是你程序是缺個(gè)標(biāo)點(diǎn)或者多了個(gè)特殊字符啥的,那就沒辦法了。
新聞熱點(diǎn)
疑難解答