使用来自 HTTP 请求的代码模拟 PHP 包含语句

Emulating PHP Include Statement Using Code From HTTP Requests

我有一个用 PHP 编写的主要 "driver" 脚本,并且基于某些条件,我希望此脚本通过 HTTP 从一个或多个支持服务器中提取代码以便加载函数进入内存,就像我使用 PHP include 语句那样。

是否可以在 PHP 中使用 HTTP 请求来提取在 returned 时实际解释为 PHP 代码的数据?

例如,假设我使用 cURL 或 Web 服务 return 存储在变量中的以下文本,比如 $URLResponse:

function userKeyGet() {
  return (isset($_SESSION['user_key']) ? $_SESSION['user_key'] : '-1');
  }  

如果我随后使用诸如 eval($URLResponse) 之类的东西,是否会创建在当前执行调用 PHP 脚本期间使用的函数?我使用 cURL 和 Buzz 将 return JSON 或类似结构的数据转换为数组,但不是函数或 class。这可能吗?谢谢。

您可以在 php.ini 中启用 include(),include_once(),require() and require_once() functions, It requires allow_url_include 加载远程 PHP 代码。

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

包含的文件应该包含代码并且不会被服务器解释为可执行文件,所以如果您使用 php 支持的网络服务器,您可以为远程文件提供另一个扩展名。

eval() 也可以。如果您使用 eval/include 并两次声明相同的函数,它将引发致命错误,因为它已经被声明过。您可以使用对象或 anonymous functions 覆盖函数。

$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();