我最近从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');?>
我想做得对,安全。
答案 0 :(得分:2)
所有解决方案都是正确的,安全性AFAIK没有真正的区别。
我认为差异可以概括为:
ini-settings提供了先前版本中已知的行为。默认情况下禁用它们的原因是安全线程,但这等于所有三个解决方案。无论您是否控制rmeote站点,包括远程文件都是一个安全问题。
file_get_contents()和curl扩展会产生一些开销,因为你必须缓冲内容,但对于php包含更复杂的文件。阅读脚本时,它们的用法稍微复杂一些。但缓冲还增加了好处:例如,您可以创建本地缓存或基本合理性检查的校验和。此外,还可以在执行之前进行语法检查,从而防止调用脚本崩溃。
Curl作为php扩展提供。因此curl解决方案仅在安装扩展时才有效,但它提供了更高的自由度,更多选项。如果您不需要那些内置功能。
答案 1 :(得分:1)
那么,
第一种方法=&gt;是正确的,你不用担心使用它。
第二种方法=&gt;是正确的,但应启用curl扩展
第三种方法=&gt;是正确的,但建议不要使用此选项,因为启用allow_url_include可能会使您的网站容易受到攻击。有关详细信息,请参阅http://en.wikipedia.org/wiki/Include_vulnerability和此链接http://wiki.dreamhost.com/Allow_url_include