我有以下代码:
$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访问它时遇到问题?
答案 0 :(得分:2)
此错误消息:
HTTP / 1.0 403 Forbidden
...实际上是直接来自您尝试访问的服务器。因此,PHP出门访问外部文件不是问题。
相反,更多的是说服服务器实际为您提供文件,就像它将其提供给Web浏览器一样。
我会检查几个问题:
文件是否受密码保护? Web浏览器将保存您输入的密码,并允许您重新访问URL而无需再次输入密码,但PHP不知道要使用的密码。
也许服务器通过检查用户代理字符串来限制非浏览器的访问?
除非您从同一网站上的其他网页推介,否则服务器可能会限制访问权限?
您可以尝试的一件事是使用online HTTP header viewer tool尝试直接请求文件。您可以尝试不同的标题,用户代理等,看看是否可以重现问题。
如果我不得不猜测,我的钱将是第一个问题 - 需要密码。但是,如果不知道实际的网址,就无法知道。
如果你弄清楚是什么阻止你访问该文件,你应该阅读http wrapper,流contexts,特别是http stream context options,了解如何从PHP设置缺少的信息。有一些方法可以指定密码,用户代理,引荐来源标头,甚至是您想要的任何随机HTTP标头。