大家
有没有办法让这段代码工作:
<?php
while (1) {
include('third_party_script.php');
}
?>
我不知道third_party_script.php中的内容。 它可能看起来像这样:
<?php
function some() { return 0;}
some();
?>
如果third_party_script.php中有函数声明,我将收到“无法重新声明”错误。所以我不能使用“include”o“require”。有解决方案吗?
提前致谢。
答案 0 :(得分:1)
正如其他人所说,你可能不想这样做。
可能的解决方案是这样的:
<?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
但我没有足够的经验来“推荐”它。
答案 1 :(得分:0)
如果内部有类或函数,则只需调用该函数或实例化该类。我不知道你为什么要从脚本中运行你不熟悉的内容。
如果您 知道,它将如下所示:
<?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();
}
?>
在没有转义的情况下一遍又一遍地循环代码将最终杀死你的进程。最终可能也不会在'时间'那么长。总而言之,这听起来像是你不想追求的方向......
答案 2 :(得分:0)
我不是你想要做什么的,但是我假设你正在尝试编写一个可以运行外部代码段的脚本,例如插件,用于某种框架。
在这种情况下你应该做的是在插件上强制实现一些结构,即
插件代码看起来像
<?php
pluginname_exec($args) {
...
Plugin Code gose here
...
}
?>
然后,您的脚本应在加载
时导入脚本然后当你想要运行插件时,你会调用
call_user_func("{$thisplugin}_exec",$args)
其中$thisplugin
是一个包含插件名称的变量,很可能是文件名,不包含.php
这样你只需要包含一次文件,但可以根据需要多次调用代码。
如果你试图以插件系统的其他原因执行某些未知代码,那么这很可能是一个坏主意。