2

我最近从 php4 升级到 php5,随之而来的通知是我的所有远程 php 文件访问都不再有效。我一直在对此进行大量研究,但对于在 php5 中包含远程 url 的正确方法,我似乎没有明确的答案。

第一个示例是以这种方式包含文件

<?php
   $data = file_get_contents("http://example.com/example.inc.php",0);
   echo $data;
?>

第2个是这样

<?php
   $ch = curl_init("http://example.com/example.inc.php");
   curl_exec($ch);
   curl_close($ch);
?>

第三是在我的 php.ini 文件中设置

allow_url_include = On      
allow_url_fopen = On

并使用好旧的

<?php include_once('http://example.com/example.inc.php');?>

我想正确且安全地做到这一点。

4

2 回答 2

2

所有解决方案都是正确的,安全 AFAIK 没有真正的区别。

我认为差异可以总结如下:

ini-settings 提供了以前版本中已知的行为。默认情况下禁用它们的原因是安全线程,但这等于所有三个解决方案。无论您是否控制远程站点,包括远程文件都是一个安全问题。

file_get_contents() 和 curl 扩展会产生一些开销,因为您必须缓冲内容,但对于 php 包含文件,这更像是一种装饰性的东西。通读脚本时,它们的用法稍微复杂一些。但是缓冲也增加了好处:例如,您可以创建一个本地缓存或一个校验和,以进行基本的合理性检查。还可以在执行之前进行语法检查,从而防止调用脚本崩溃。

Curl 作为 php 扩展提供。因此 curl 解决方案仅在安装扩展程序时才有效,但它提供了更高级别的自由度和更多选项。如果您不需要那些保留内置函数。

于 2012-08-03T08:40:12.357 回答
1

出色地,

第一种方法 => 是正确的,您不必担心使用它。

第二种方法=> 是正确的,但是应该启用curl扩展

第三种方法 => 是正确的,但不建议使用此选项,因为启用 allow_url_include 可能会使您的网站易受攻击。有关更多详细信息,请参阅http://en.wikipedia.org/wiki/Include_vulnerability和此链接http://wiki.dreamhost.com/Allow_url_include

于 2012-08-03T10:51:25.623 回答