【问题标题】:Emulating PHP Include Statement Using Code From HTTP Requests使用来自 HTTP 请求的代码模拟 PHP Include 语句
【发布时间】:2015-08-20 07:46:22
【问题描述】:

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

【问题讨论】:

  • 如果文件未被服务器解释为可执行文件或被解析,它将按原样提供,因此如果您不介意将php 代码暴露给全世界,请使用@987654323 @'s file_get_contents() 并将文件作为.txt 或其他任何内容进行拉取

标签: php function http curl include


【解决方案1】:

您可以使用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 并两次声明相同的函数,则会引发致命错误,因为它已被声明。您可以使用 object 或 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();

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多