簡體   English   中英

如何阻止PHP代碼執行?

[英]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函數來暫停編譯器的執行

http://www.php.net/manual/en/function.halt-compiler.php

您可以嘗試殺死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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM