可以忽略PHP中父脚本退出子脚本吗?

时间:2014-09-08 20:51:09

标签: php

子脚本终止父脚本,因为它具有退出;

由于它是第三方扩展,我需要避免任何核心攻击。是否有可能忽略子脚本从父脚本退出。我从外部脚本调用它的控制器和方法。

parent.php

<?php

require "child.php";

?>

child.php

<?php
does something;
exit;
?>

更新

只要我们不修改子脚本,任何替代解决方案都可以。

5 个答案:

答案 0 :(得分:5)

  

是否可以忽略PHP中包含脚本中的exit

没有

exit 终止脚本的执行,无论它在何处被调用。

sjagr's answer所述,还有其他方法可以使用exit

答案 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命令,否则继续执行其余代码。