(PHP 4, PHP 5, PHP 7, PHP 8)
register_shutdown_function — 注冊(cè)一個(gè)會(huì)在php中止時(shí)執(zhí)行的函數(shù)
注冊(cè)一個(gè) callback
,它會(huì)在腳本執(zhí)行完成或者 exit() 后被調(diào)用。
可以多次調(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)用。
callback
待注冊(cè)的中止回調(diào)
中止回調(diào)是作為請(qǐng)求的一部分被執(zhí)行的,因此可以在它們中進(jìn)行輸出或者讀取輸出緩沖區(qū)。
parameter
可以通過傳入額外的參數(shù)來將參數(shù)傳給中止函數(shù)
...
沒有返回值。
如果傳入的callback不是可調(diào)用的,那么將會(huì)產(chǎn)生一個(gè) E_WARNING
級(jí)別的錯(cuò)誤。
示例 #1 register_shutdown_function() 例子
<?php
function shutdown()
{
// This is our shutdown function, in
// here we can do any last operations
// before the script is complete.
echo 'Script executed with success', PHP_EOL;
}
register_shutdown_function('shutdown');
?>
注意:
在某些web server(如Apache)上,可以在中止函數(shù)內(nèi)對(duì)腳本的工作目錄進(jìn)行修改。
注意:
如果進(jìn)程被信號(hào)SIGTERM或SIGKILL殺死,那么中止函數(shù)將不會(huì)被調(diào)用。盡管你無法中斷SIGKILL,但你可以通過pcntl_signal() 來捕獲SIGTERM,通過在其中調(diào)用exit()來進(jìn)行一個(gè)正常的中止。