【问题标题】:Include through HTTP通过 HTTP 包含
【发布时间】:2011-10-18 13:10:38
【问题描述】:

我在另一台服务器上有一个我可以信任的文件,因为它是我自己的代码,其中有一个包含一些设置的数组。

当我使用 include_once 和 print_r 包含它时,我得到一个未定义的变量。

我还尝试从我包含的文件中返回变量并将其分配给脚本中的变量,如下所示:

$var = include($url);

$url 所在的位置:

$array = array(1,2,3); return $array;

当我print_r($var) 时,我只得到 1 个。

【问题讨论】:

  • 打开error_reporting(E_ALL); 看看是否可以解释。
  • @mario - 它应该显示一些特别的东西吗?什么都没发生。是的,我的 php.ini 中有 allow_url_include
  • 为什么不将数组设置到文件中包含?然后调用它?你必须有理由按照你尝试的方式去做。
  • 这就是我要问的。 ——身体损失是对的。 Include() 只看到脚本的输出。返回值不会跨服务器传输。您对 $url 所含内容的描述无效。

标签: php include require


【解决方案1】:

这是因为其他服务器会解析文件并返回 RESULT,而不是实际代码。您需要获取文件的实际内容,这只有在您禁用其他服务器上的 php 或 ftp 到它时才有可能。 我建议将文件复制到您正在使用的服务器上,更安全更容易

您尝试获取的文件将与您在 Web 浏览器中访问时一样返回,因为远程 Web 服务器将通过 php 引擎解析文件的内容。

【讨论】:

  • 或者通过使用另一个不被解释的扩展名(例如.txt)或者输出自己执行的代码。
  • 不,正如@fishfisk 所说,您需要更改文件类型或通过执行 include(*) 输出要执行的代码
  • 另一台服务器上的脚本将输出文本,而不是 php 数组。所以不,只是复制文件会更安全。
【解决方案2】:

远程主机:

echo serialize($array);

本地主机:

$array = unserialize(file_get_contents($url));

【讨论】:

  • 我实际上不能这样做,因为它正在其他地方使用 - 猜我必须复制在当前服务器上创建文件的功能:/
  • @hex4:制作第二个包装脚本会不会太费力?
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多