php5读取远程文件的有效方式


php5 reading remote file the valid way

我最近从php4升级到php5,并注意到我所有的远程php文件访问都不再工作。我已经对此做了很多研究,但我似乎没有一个明确的答案,即在php5中包含远程url的正确方法是什么。

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

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

第二条是

<?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');?>

我想做这件事的权利和安全。

所有解决方案都是正确的,在安全性AFAIK方面没有真正的差异。

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

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

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

Curl是作为php扩展提供的。因此,curl解决方案只有在安装了扩展时才有效,但它提供了更高的自由度和更多的选择。如果您不需要这些,请使用内置函数。

好吧,

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

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

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