php:如何反复执行来自其他脚本的脚本

php:如何反复执行来自其他脚本的脚本,php,include,Php,Include,每个人 有没有办法让这段代码正常工作: <?php while (1) { include('third_party_script.php'); } ?> 我不知道第三方脚本.php中有什么。 它可能看起来像这样: <?php function some() { return 0;} some(); ?> <?php while (1) { passthru('php third_par

每个人

有没有办法让这段代码正常工作:

<?php
    while (1) {
        include('third_party_script.php');
    }
?>

我不知道第三方脚本.php中有什么。 它可能看起来像这样:

<?php
    function some() { return 0;}
    some();
?>
<?php
    while (1) {
        passthru('php third_party_script.php');
    }
 ?>

如果在第三方脚本.php中有函数声明,我将得到一个“cannot Redclare”错误。因此,我不能使用“include”o“require”。有解决办法吗


提前感谢。

如果内部有类或函数,只需调用该函数或实例化该类即可。然而,我想知道为什么你想从一个你不熟悉的内容的脚本中运行一些东西

但是,如果您知道,它的工作原理如下:

<?php
    while (1) {
        include('third_party_script.php');
        //call some_function which is defined in file above
        some_function();
        //instantiate object and call some_function
        $Object = new ThirdPartyClass();
        $Object->some_function();
    }
?>


在没有转义的情况下反复循环代码最终会杀死您的进程。最终“时间”可能不会太长。总而言之,这听起来像是一个你不想追求的方向…

我不知道你想做什么,但是我假设你正在尝试为某种框架编写一个可以运行外部代码段(如插件)的脚本

在这种情况下,你真正应该做的是在插件上增加一些结构

插件代码如下所示

<?php
   pluginname_exec($args) {
      ...
      Plugin Code gose here
      ...
   }
?>
其中,
$thisplugin
是一个包含插件名称的变量,很可能是文件名,不带.php

这样,您只需包含一次文件,但可以根据需要多次调用代码


如果由于插件系统以外的原因而试图执行一些未知代码,这很可能是个坏主意。

正如其他人所说,您可能不想这样做

然而,一个可能的解决方案是这样的:

<?php
    function some() { return 0;}
    some();
?>
<?php
    while (1) {
        passthru('php third_party_script.php');
    }
 ?>

但这取决于第三方脚本正在执行的操作,类似的操作将起作用:

<?php

function print_something()
{
        print "hey";
}

print_something();

?>

(尽管如果您运行类似于inside
while(1)
,它会将事情锁定)

但是,需要获取变量之类的东西不会

关于做上述工作,我有很多顾虑,但这是你所遇到的具体问题的一个可能的解决方案(而不是你试图解决的更一般的问题)

另一个可以实现类似这类深奥事物的地方是runkit:


但是我没有足够的经验来“推荐”它。

当你不知道它包含什么内容时,你在包含一个文件?这听起来不是一个好主意。当前的解决方案有什么问题?你到底想做什么,我不喜欢无限包含一个文件的想法。使用cURL反复访问该脚本?我不打算运行它。它将由“third_party_script.php”的作者运行。假设我正在编写一个允许反复执行“第三方脚本.php”的库。非常感谢您的回复。这几乎就是我想要的。几乎是这样,因为就我所知,passthru将派生另一个进程,并使用另一个php解释器执行“third_party_script.php”。是的,这就是为什么它作为传递数据的解决方案有点有限的原因,尽管如果您只需要定义一些第三方脚本可用的常量或函数,则可以使用中间包装器。在PHP中几乎不能重新声明函数或类。你可以尝试滥用名称空间或eval来实现你想要的,但我想这会给你带来一大堆麻烦。