很抱歉这个引人注目的标题,只是想知道是否有办法防止所有类型的PHP命令执行除了一个。
例如,现在当我使用die()终止脚本时,我的页面看起来有一半被破坏,因为页面的html底部部分无法加载,因为它是使用include()函数引入的。
那么有没有办法告诉PHP“除了include函数之外不再允许执行任何命令”?
答案 0 :(得分:12)
您可以使用return
“终止”包含的文件,而不会删除整个脚本:
test1.php
<?php
include 'test2.php';
echo 'foo';
test2.php
<?php
echo 'bar';
return;
echo 'baz';
输出:
barfoo
答案 1 :(得分:2)
您将需要使用自定义die()命令(例如my_die())来包含所需的文件。你不能覆盖die(),任何其他函数也不能让你做你想要的。
答案 2 :(得分:1)
exit()将停止执行,并运行任何已注册的退出处理程序。
抛出异常会升到周围尝试的任何地方。如果没有尝试到顶级,它将终止脚本的所有执行。
全局范围内的返回将返回当前包含文件,返回到包含/要求文件的任何内容。
就个人而言,我建议采用经过深思熟虑的异常处理方法,并使用try / throw。
答案 3 :(得分:0)
你有什么理由不能这样做吗?
if(something didn't work) {
include('footer.php');
die();
}
如果您经常使用它,请将其变成一个功能。
function finish_and_die($message) {
print $message;
include('footer.php');
exit;
}
答案 4 :(得分:0)
您可以尝试以下方式:
if( is_secure($_GET['value']) ) // Whatever you're using to check if the value is allowed
{
// Page content goes here
}
这样,所有其他包含和页面处理代码仍然会被调用。
或者,如果它无效,则抛出异常,并拥有一个知道如何完成页面代码的异常处理程序。
答案 5 :(得分:-1)
如果您使用OOP方法结合输出缓冲,这就是您解决问题的方法:
Controller类(逻辑所在的位置)有一个成员,它是Template类的一个实例。
Controller类有一个__destruct
方法,用于呈现模板
调用exit()
或die()
时,调用Controller对象的__destruct
方法,后者又调用Template对象的render
方法。