所有
有没有一种方法可以让这段代码发挥作用:
<?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
这样,您只包含一次文件,但可以根据需要多次调用代码。
若你们因为插件系统以外的原因而试图执行一些未知代码,那个很可能是个坏主意。