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

时间:2013-07-23 06:49:40

标签: php apache file url httpforbiddenhandler

我有以下代码:

$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访问它时遇到问题?

1 个答案:

答案 0 :(得分:2)

此错误消息:

  

HTTP / 1.0 403 Forbidden

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

相反,更多的是说服服务器实际为您提供文件,就像它将其提供给Web浏览器一样。

我会检查几个问题:

  1. 文件是否受密码保护? Web浏览器将保存您输入的密码,并允许您重新访问URL而无需再次输入密码,但PHP不知道要使用的密码。

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

  3. 除非您从同一网站上的其他网页推介,否则服务器可能会限制访问权限?

  4. 您可以尝试的一件事是使用online HTTP header viewer tool尝试直接请求文件。您可以尝试不同的标题,用户代理等,看看是否可以重现问题。

    如果我不得不猜测,我的钱将是第一个问题 - 需要密码。但是,如果不知道实际的网址,就无法知道。


    如果你弄清楚是什么阻止你访问该文件,你应该阅读http wrapper,流contexts,特别是http stream context options,了解如何从PHP设置缺少的信息。有一些方法可以指定密码,用户代理,引荐来源标头,甚至是您想要的任何随机HTTP标头。