2014-04-03 47 views
0

我有一個PHP應用程序,並希望在請求結束時調用特定的函數(此函數將信息寫入日誌文件)。實際上,我希望這個函數被最後調用,不管代碼採用什麼路線,也不管之前調用了哪些函數。在請求結束前調用一個特定的函數

有什麼方法可以知道或瞭解PHP何時準備好將信息發送回Web服務器?

function req_end() { 
    global $logger; 
    $logger->log("----------------------------------------------", PEAR_LOG_INFO); 
    $logger->log("     Request End     ", PEAR_LOG_INFO); 
    $logger->log("==============================================", PEAR_LOG_INFO); 
    $logger->log("", PEAR_LOG_INFO); 
} 
register_shutdown_function('req_end'); 

如果我打電話req_end在我的index.php文件的末尾,然後將其寫入日誌,如果不是,它是不是在所有調用。 謝謝 Crouz

回答

0

我認爲你正在尋找這個register_shutdown_function()

它每當腳本完成運行的功能,即使是同一個exit()

這是從文檔複製一個例子:

<?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'); 
?> 
+0

感謝您的回答。我知道這個函數,但認爲它不是正確的,因爲儘管我用函數的名稱調用它來寫入日誌,但沒有任何反應,日誌沒有寫入。所以基本上,出於某種原因,它不適合我。 – Crouzilles

+0

但是你的函數運行嗎?如果是這樣,你應該改變你的問題,因爲你的問題涉及到寫入日誌文件,而不是在腳本結束時觸發函數。順便說一句,你可以顯示你的代碼來寫這個日誌文件,我相信你只是把路徑錯誤或一些小錯誤,例如嘗試使用絕對路徑。 – aleation

+0

如果我手動調用該函數,則該函數運行,但如果使用register_shutdown_function調用,則該函數不會運行。我甚至寫了另一個函數來簡單地回顯一些東西,然後用register_shutdown_function註冊它,但它也不會被調用。我已經讀過,這個功能可以在php配置文件中關閉,但我沒有線索尋找什麼,所以我必須做一些搜索。 – Crouzilles

0

好的,我發現了什麼是錯的。 這裏詳細描述問題:Write to file with register_shutdown_function

我會嘗試在這篇文章中的補救措施,如果沒有,我將不得不手動調用函數自己。

關注 Crouz

+0

的確,通過使用上面提供的帖子中描述的技術,一切正常。我以爲我會生氣一會兒。 – Crouzilles

相關問題