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


php: how to execute script from other script over and over

所有

有没有一种方法可以让这段代码发挥作用:

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

我不知道third_party_script.php中有什么。它可能看起来像这样:

<?php
    function some() { return 0;}
    some();
?>

如果third_party_script.php中有函数声明,我将得到一个"cannot redclare"错误。所以我不能使用"include"o"require"。有解决方案吗?

提前谢谢。

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

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

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

但这取决于第三方脚本在做什么,像这样的东西会起作用:

<?php
function print_something()
{
        print "hey";
}
print_something();
?>

(尽管如果你在while(1)内部运行类似的东西,它会锁住东西(

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

我对做上面的事情有很多顾虑,但这是你遇到的特定问题的一个可能的解决方案(而不是你试图解决的更普遍的问题(。

另一个可以实现这样深奥的东西的地方是runkit:

http://www.php.net/manual/en/intro.runkit.php

但我没有足够的经验来"推荐"它。

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

然而,如果您知道,它的工作方式如下:

<?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
      ...
   }
?>

您的脚本应该在加载时导入该脚本

然后当你想运行插件时,你会调用

call_user_func("{$thisplugin}_exec",$args)

其中$thisplugin是一个变量,包含插件名称,很可能是文件名,不包含.php

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

若你们因为插件系统以外的原因而试图执行一些未知代码,那个很可能是个坏主意。

相关文章: