子脚本终止父脚本,因为它具有退出;
由于它是第三方扩展,我需要避免任何核心攻击。是否有可能忽略子脚本从父脚本退出。我从外部脚本调用它的控制器和方法。
parent.php
<?php
require "child.php";
?>
child.php
<?php
does something;
exit;
?>
更新
只要我们不修改子脚本,任何替代解决方案都可以。
答案 0 :(得分:5)
答案 1 :(得分:2)
如果你确实最终编辑了核心文件,那么就可以在“子脚本”中使用return
。来自the PHP docs:
如果从全局范围调用,则执行当前脚本 文件已结束。如果包含或需要当前脚本文件, 然后将控制权传递回调用文件。而且,如果 包含当前脚本文件,然后返回给予的值 作为包含调用的值返回。如果从中调用return 在主脚本文件中,脚本执行结束。如果 当前脚本文件由
auto_prepend_file
或。{ php.ini中的auto_append_file
配置选项,然后是该脚本 文件的执行结束。
但是,如果父脚本具有exit
语句,则无法阻止父脚本阻止子进程终止。很遗憾,您无法覆盖此功能。
答案 2 :(得分:0)
您可以在线程中运行child.php。使用join等待该线程完成后再继续使用主线程。这样,在child.php中调用exit将终止子线程,主线程将继续。
class myThread extends Thread {
public function run(){
include "child.php";
//Call methods from child.php here
}
}
$thread = new myThread();
$thread->start();
$thread->join();
答案 3 :(得分:0)
非常感谢大家回答这个问题。最后,我想出了以下另类想法。我不确定它是否与任何设计模式相似。尽管child.php已退出,但以下示例不会从循环终止。
<强> parent.php 强>
<?php
require "temp.php";
for($i=1;$i<10;$i++){
file_get_contents("http://url/temp.php?var=$i");
}
?>
<强> temp.php 强>
<?php
$var = $_GET['var'];
// execute
require "child.php";
$testController = new TestController();
$testController->method($var);
?>
答案 4 :(得分:-1)
是。 在child.php中,您可以使用return将控件返回到parent.php。 否则,如果未包含child.php,它将继续正常操作,即退出。
<?php
does something;
return;
exit;
?>
如果要检查文件是否包含或直接运行,可以this answer。 因此,在这种情况下,请检查子文件,如果未包含,请转到exit命令,否则继续执行其余代码。