使用HTTP请求代码模拟PHP Include语句


Emulating PHP Include Statement Using Code From HTTP Requests

我有一个用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或类似的结构化数据,我将这些数据转换为数组,而不是函数或类。这可能吗?谢谢。

您可以使用include(),include_once(),require()和require_once()函数加载远程PHP代码,它需要在PHP .ini中启用allow_url_include。

require_once("http://www.yourserver.com/function.php"); 

包含的文件应该包含代码,而不是由服务器解释为可执行的,所以如果你使用php支持的web服务器,也许你可以给远程文件另一个扩展名。

eval()也可以工作。如果使用eval/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();