【发布时间】:2016-02-07 16:22:36
【问题描述】:
我正在尝试使用 fopen 函数从远程 url 下载文件。
问题它的功能从我需要的一个网站返回 false。来自其他领域的功能工作正常。
怎么可能?也许在php中有一些选项?或者那个网站可以保护文件不被某些访问(但浏览器文件可用)?
【问题讨论】:
标签: php
我正在尝试使用 fopen 函数从远程 url 下载文件。
问题它的功能从我需要的一个网站返回 false。来自其他领域的功能工作正常。
怎么可能?也许在php中有一些选项?或者那个网站可以保护文件不被某些访问(但浏览器文件可用)?
【问题讨论】:
标签: php
服务器端可以执行许多检查来防止“错过使用”他们的服务。一个例子是检查“HTTP Referer Header”,它表明您的请求是由从链接导航到对象的浏览器完成的。
如果您愿意,您可以模拟所有这些,但为此您必须准确找出您的请求与浏览器成功发出的请求之间的区别。为此要做两件事:
找出您收到的确切错误消息。最简单的方法是使用 php 的 cURL 扩展而不是 file_open() 来满足您的请求,它允许您转储返回的所有内容。回复中可能包含有价值的信息,例如原因。
通过网络嗅探器监控这两个请求,例如tcpdump 或wireshark。两个请求的比较可以说明确切的差异。这又是您在脚本中精确重建浏览器请求所需的信息。
【讨论】:
在某些共享主机或某些 VPS 上 fopen 无法正常工作或在 PHP 中被禁用。尝试使用 CURL 来获取内容。如果这不起作用,最后一个解决方案(仅当您通过 GET 发送一些信息但不接收数据时)是使用 <img> 标签和内部“src”发送请求。仅当您发送信息时才有效,但如果您需要接收某些内容,则需要使用 AJAX 或 cURL。
【讨论】: