[英]How to stop PHP code execution?
有沒有辦法立即停止PHP代碼執行?
我知道退出,但它明確指出:
終止腳本的執行。 即使調用exit,也將始終執行關閉函數和對象析構函數。
所以我想要實現的是在我調用exit或者其他什么時完全停止PHP代碼的執行。
有幫助嗎?
編輯:簡森回答后
試驗1:
function newExit() {
__halt_compiler();
}
echo "start";
newExit();
echo "you should not see this";
顯示Fatal error: __HALT_COMPILER() can only be used from the outermost scope in
非常期望Fatal error: __HALT_COMPILER() can only be used from the outermost scope in
。
試驗2:
function newExit() {
include 'e.php';
}
echo "start";
newExit();
echo "you should not see this";
e.php只包含__halt_compiler();
這表明startyou不應該看到這個
編輯:我為什么要這樣做?
我正在開發一個應用程序,其中包含一個專有庫(需要通過我無法訪問的虛擬主機配置文件)作為加密代碼。 是一種用於安全目的的監控庫。 其中一個行為是它注冊了一些記錄實例狀態的關閉函數(它將統計數據保存到數據庫中)
我想要做的是基於(遠程IP) 禁用某些特定條件的日志記錄
請參閱用戶Pekka的以下信息
根據手冊,即使使用die()
或exit()
終止腳本,也會執行析構函數:
即使使用exit()
停止腳本執行,也將調用析構函數。
在析構函數中調用exit()將阻止執行剩余的關閉例程。
根據這個PHP:析構函數vs register_shutdown_function ,當達到PHP的執行時間限制時,析構函數不會被執行(在Windows 2上的Apache 2,PHP 5.2上確認)。
析構函數也不會被當腳本終止,因為內存的限制達到執行。 (剛剛測試過)
析構函數確實在致命錯誤上執行(剛剛測試過)更新:OP無法確認這一點 - 似乎存在致命錯誤
它不會在解析錯誤執行(因為整個腳本不會被解釋)
如果服務器進程崩潰或者PHP控件之外的其他異常發生,則肯定不會執行析構函數。
在這個問題中引用在 沒有調用PHP中的析構函數時是否存在任何實例?
您可以使用__halt_compiler
函數來暫停編譯器的執行
您可以嘗試殺死PHP進程:
exec('kill -9 ' . getmypid());
除了明顯的die()
和exit()
,這也有效:
<?php
echo "start";
__halt_compiler();
echo "you should not see this";
?>
我不確定你明白什么是“退出”狀態
Terminates execution of the script. Shutdown functions and object destructors will always be executed even if exit is called.
這樣做是正常的,它必須清除它之前調用的所有變量和函數的內存。 不執行此操作意味着您的內存將在RAM中保持卡住和停止,如果這種情況會發生多次,您需要重新啟動並刷新RAM以便剩下任何內存。
或嘗試
trigger_error('Die', E_ERROR);
這可以通過, exit()函數打印一條消息並退出當前腳本。 此函數是die()函數的別名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.