簡體   English   中英

是否可以忽略PHP中父腳本退出子腳本?

[英]Is it possible to ignore exit of child script from parent script in PHP?

子腳本終止了父腳本,因為它退出了。

由於它是第三方擴展,因此我需要避免任何核心攻擊。 是否有可能以某種方式忽略子腳本從父腳本的退出。 我從外部腳本調用其控制器和方法。

parent.php

<?php

require "child.php";

?>

child.php

<?php
does something;
exit;
?>

更新

只要我們不修改子腳本,任何其他解決方案都可以。

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

沒有。

exit無論腳本從何處調用都會終止其執行

sjagr的回答所述 ,使用exit可以替代。

如果實際上確實要編輯核心文件,那么可以在“子腳本”內部使用return PHP文檔

如果從全局范圍調用,則結束當前腳本文件的執行。 如果包含或需要當前腳本文件,則控制權將傳遞回調用文件。 此外,如果包括了當前腳本文件,則返回的值將作為include調用的值返回。 如果從主腳本文件中調用return,則腳本執行結束。 如果當前腳本文件由auto_prepend_fileauto_append_file配置選項命名,則該腳本文件的執行結束。

但是,如果子腳本具有exit語句,則無法阻止父腳本阻止子腳本終止該進程。 不幸的是,您無法覆蓋此功能。

您可能可以在線程中運行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();

非常感謝大家回答這個問題。 最后,我提出了以下替代方案。 我不確定它是否與任何設計模式相似。 盡管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);
?>

是。 在child.php中,您可以使用return將控件返回給parent.php。 否則,如果不包括child.php,它將繼續其正常操作,即退出。

<?php
does something;
return;
exit;
?>

如果要檢查是否包含文件或直接運行文件,則可以使用此答案 因此,在這種情況下,請檢查子文件(如果未包括在內),請轉至exit命令,否則繼續其余代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM