无法使用PHP中的file()函数访问外部URL


Unable to access outside URL using file() function in PHP

我有以下代码:

$url = 'http://' . $host . ':' . $port . $params;
$results = file( $url );

我得到以下异常:

file(http://someurl.com/asd/asd): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

但我直接在浏览器中访问URL(存储在$URL变量中),它运行得很好。为什么我在从PHP访问它时遇到问题?

此错误消息:

HTTP/1.0 403禁止

实际上直接来自您试图访问的服务器。因此,PHP访问外部文件不是问题。

相反,更大的问题是说服服务器像把文件交给网络浏览器一样,把它交给你。

我要检查几个问题:

  1. 文件是否受密码保护?web浏览器会保存您输入的密码,并允许您在不重新输入密码的情况下重新访问URL,但PHP不知道该使用什么密码。

  2. 也许服务器通过检查用户代理字符串来限制来自非浏览器的访问?

  3. 也许服务器正在限制访问,除非你是从同一网站的另一个页面被推荐的?

您可以尝试的一件事是使用在线HTTP标头查看器工具来尝试直接请求文件。您可以尝试使用不同的标头、用户代理等,看看是否可以重现问题。

如果非要我猜的话,我的钱会花在第一个问题上——需要密码。如果不知道实际的URL,就无法知道。


如果你确实弄清楚是什么阻止了你访问文件,你应该阅读http包装器、流上下文,特别是http流上下文选项,以了解如何从PHP中设置缺失的信息。有一些方法可以指定密码、用户代理、引用标头,甚至任何您想要的随机HTTP标头。