如何停止PHP代码执行?

vof42yt1  于 2022-12-21  发布在  PHP
关注(0)|答案(7)|浏览(177)

有没有办法立即停止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,这是非常预期的。
试验二:

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

e.php只包含__halt_compiler();
这将显示开始您不应看到此内容

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

我正在开发一个应用程序,它包含一个加密代码形式的专有库(需要通过虚拟主机配置文件,但我无法访问)。这是一种用于安全目的的监控库。它的行为之一是注册一些记录示例状态的关闭函数(它将统计信息保存到数据库中)
我想要做的是基于(远程IP)针对某些特定条件禁用此日志记录

ndasle7k

ndasle7k1#

请参阅用户Pekka提供的以下信息

根据手册,即使脚本使用die()exit()终止,也会执行析构函数:
即使使用exit()停止脚本执行,析构函数也会被调用。在析构函数中调用exit()将阻止其余的关闭例程执行。根据PHP: destructor vs register_shutdown_function,当PHP的执行时间限制达到时,析构函数不会执行(在Apache 2上确认,在Windows 7上PHP 5.2)。
当脚本因为达到内存限制而终止时,析构函数也执行。(刚刚测试过)
析构函数在发生致命错误时执行(刚刚测试)更新:操作员无法确认这一点-似乎有致命的错误,事情是不同的
不会在出现解析错误时执行(因为不会解释整个脚本)
如果服务器进程崩溃或者发生了PHP无法控制的其他异常,析构函数肯定不会执行。

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

pieyvz9o

pieyvz9o2#

return有什么问题?

echo "you will see this";
return;    
echo "you will not see this";
798qvoo8

798qvoo83#

您可以使用__halt_compiler函数来停止编译器执行
http://www.php.net/manual/en/function.halt-compiler.php

c86crjj0

c86crjj04#

您可以尝试终止PHP进程:

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

20jt8wwn5#

除了明显的die()exit()之外,下面的方法也有效:

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

f87krz0w6#

我不确定你是否明白“退出”是什么意思

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

这样做很正常,它必须清除你之前调用的所有变量和函数的内存。不这样做意味着你的内存会一直卡在你的RAM中,如果这种情况发生几次,你就需要重新启动并刷新你的RAM以保留任何内存。

dgenwo3n

dgenwo3n7#

或尝试

trigger_error('Die', E_ERROR);

相关问题