我最近从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