如何阻止PHP代码执行?

时间:2014-01-30 13:22:39

标签: php

有没有办法立即停止执行PHP代码?

我知道exit,但它明确指出:

  

终止脚本的执行。即使调用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

试验2:

function newExit() {
    include 'e.php';
}
echo "start";
newExit();
echo "you should not see this";

e.php只包含__halt_compiler();

这表明 startyou不应该看到这个

编辑:我为什么要这样做?

我正在开发一个应用程序,其中包含一个专有库(通过我无法访问的虚拟主机配置文件所需),它是加密代码。是一种用于安全目的的监控库。其中一个行为是它注册了一些记录实例状态的关闭函数(它将统计数据保存到数据库中)

我想要做的是基于(远程IP)禁用针对某些特定条件的此日志记录

7 个答案:

答案 0 :(得分:16)

请参阅用户Pekka的以下信息

根据手册,即使脚本使用die()exit()终止,也会执行析构函数:

即使使用exit()停止脚本执行,也将调用析构函数。在析构函数中调用exit()将阻止执行剩余的关闭例程。
根据这个PHP: destructor vs register_shutdown_function,当达到PHP的执行时间限制时,析构函数会执行执行(在Apache 2上确认,在Windows 7上为PHP 5.2)。

当脚本终止时,析构函数也会执行 not ,因为已达到内存限制。 (刚刚测试过)

析构函数确实在致命错误上执行(刚刚测试过)更新:OP无法确认这一点 - 似乎有不同的致命错误

在解析错误上执行(因为不会解释整个脚本)

如果服务器进程崩溃或者PHP控制之外的其他异常发生,则肯定不会执行析构函数。

在此问题中引用 Are there any instances when the destructor in PHP is NOT called?

答案 1 :(得分:2)

您可以使用__halt_compiler函数来暂停编译器执行

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

答案 2 :(得分:1)

您可以尝试杀死PHP进程:

exec('kill -9 ' . getmypid());

答案 3 :(得分:1)

除了显而易见的die()exit()之外,这也有效:

<?php
echo "start";
__halt_compiler();
echo "you should not see this";
?>

答案 4 :(得分:0)

我不确定你明白什么是“退出”状态

Terminates execution of the script. Shutdown functions and object destructors will always be executed even if exit is called.

执行此操作是正常的,它必须清除它之前调用的所有变量和函数的内存。不这样做意味着你的内存会在你的RAM中停滞不前,如果这种情况会发生几次,你需要重新启动并刷新你的内存以便留下任何内存。

答案 5 :(得分:0)

或尝试

trigger_error('Die', E_ERROR);

答案 6 :(得分:0)

这可以通过, exit()功能打印一条消息并退出当前脚本。 此函数是 die()函数的别名。

enter link description here