當(dāng)程序在線上運(yùn)行時(shí),如果遇到BUG,想不在前端輸出錯(cuò)誤信息,同時(shí)能及時(shí)郵件通知開(kāi)發(fā)者,register_shutdown_function
函數(shù)就可以派上用場(chǎng)了。
注冊(cè)一個(gè)會(huì)在腳本執(zhí)行完成或者 exit() 后被調(diào)用的函數(shù)。
可以多次調(diào)用register_shutdown_function()
,這些被注冊(cè)的回調(diào)會(huì)按照他們注冊(cè)時(shí)的順序被依次調(diào)用。 如果你在注冊(cè)的方法內(nèi)部調(diào)用 exit(), 那么所有處理會(huì)被中止,并且其他注冊(cè)的中止回調(diào)也不會(huì)再被調(diào)用。
register_shutdown_function
函數(shù),當(dāng)我們的腳本執(zhí)行完成或意外死掉導(dǎo)致PHP執(zhí)行即將關(guān)閉時(shí),我們的這個(gè)函數(shù)將會(huì) 被調(diào)用,可以配合 error_get_last
使用,獲取錯(cuò)誤信息。
register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )
callable 回調(diào)函數(shù)
parameter可以通過(guò)傳入額外的參數(shù)來(lái)將參數(shù)傳給中止函數(shù)。
DEMO1:
//關(guān)閉錯(cuò)誤報(bào)告 error_reporting(0); //實(shí)現(xiàn)自己的錯(cuò)誤信息展示 register_shutdown_function(‘myShutdown‘); $debug = true; function myShutdown() { global $debug; // 無(wú)論錯(cuò)誤是否發(fā)生,這句都會(huì)執(zhí)行 echo ‘ERROR‘ , ‘<br/>‘; if (!$debug) { $error = error_get_last(); // todo 可以在這里做郵件發(fā)送提醒 或 錯(cuò)誤日志收集 var_export($error); } }
DEMO2:
// 回到函數(shù)帶參數(shù):記錄當(dāng)前請(qǐng)求URL $current_page = htmlspecialchars($_SERVER[‘SCRIPT_NAME‘], ENT_QUOTES, ‘UTF-8‘); $current_page .= $_SERVER[‘QUERY_STRING‘] ? ‘?‘.htmlspecialchars($_SERVER[‘QUERY_STRING‘], ENT_QUOTES, ‘UTF-8‘) : ‘‘; register_shutdown_function(function ($current_page) { //todo send email or log }, $current_page); error_get_last() //錯(cuò)誤信息查看:http://php.net/manual/zh/errorfunc.constants.php
推薦教程:PHP視頻教程