我有一个用PHP编写的主要“驱动程序”脚本,并且基于某些标准,我希望这个脚本通过HTTP从一个或多个支持服务器中提取代码,以便将函数加载到内存中,就好像我已经完成了所以使用PHP include语句。
是否可以在PHP中使用HTTP请求来提取返回时实际解释为PHP代码的数据?
例如,假设我使用cURL或Web服务返回存储在变量中的以下文本,例如$ URLResponse:
function userKeyGet() {
return (isset($_SESSION['user_key']) ? $_SESSION['user_key'] : '-1');
}
如果我之后使用了诸如eval($ URLResponse)之类的东西,是否会创建在当前执行调用PHP脚本期间使用的函数?我已经使用cURL和Buzz来返回JSON或类似结构化的数据,我已将其转换为数组,但不是函数或类。这可能吗?谢谢。
答案 0 :(得分:1)
您可以使用include(),include_once(),require()和require_once()函数加载远程PHP代码,它需要在php.ini中启用allow_url_include。
$code="function userKeyGet() {
return (isset(\$_SESSION['user_key']) ? \$_SESSION['user_key'] : '-1');
}";
eval($code);
eval($code); # Second time using eval on $code with "Fatal error: Cannot redeclare"
# This will work
echo userKeyGet();
# An example for anonymous function way
$code="\$userKeyGet = function() {
return (isset(\$_SESSION['user_key']) ? \$_SESSION['user_key'] : '-1');
};";
eval($code); # this wont raise redeclare error
echo $userKeyGet();
包含的文件应包含代码,而不是服务器将其解释为可执行文件,因此如果您使用的是支持php的Web服务器,则可以为远程文件提供另一个扩展名。
eval()也会起作用。如果你使用eval / include并且声明两次相同的函数,它将引发致命错误,因为它已经被声明了。您可以使用对象或anonymous functions覆盖该功能。
<select name="filter">
<option selected value="">All</option>
<option value="newest">Newest</option>
</select>