我有以下代码:
$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访问外部文件不是问题。
相反,更大的问题是说服服务器像把文件交给网络浏览器一样,把它交给你。
我要检查几个问题:
-
文件是否受密码保护?web浏览器会保存您输入的密码,并允许您在不重新输入密码的情况下重新访问URL,但PHP不知道该使用什么密码。
-
也许服务器通过检查用户代理字符串来限制来自非浏览器的访问?
-
也许服务器正在限制访问,除非你是从同一网站的另一个页面被推荐的?
您可以尝试的一件事是使用在线HTTP标头查看器工具来尝试直接请求文件。您可以尝试使用不同的标头、用户代理等,看看是否可以重现问题。
如果非要我猜的话,我的钱会花在第一个问题上——需要密码。如果不知道实际的URL,就无法知道。
如果你确实弄清楚是什么阻止了你访问文件,你应该阅读http包装器、流上下文,特别是http流上下文选项,以了解如何从PHP中设置缺失的信息。有一些方法可以指定密码、用户代理、引用标头,甚至任何您想要的随机HTTP标头。