PHP应用程序提供二进制数据下载:
header("Content-Type: application/octet-stream");
header("Pragma: public");
header("Cache-Control: private");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("expires: 0");
set_time_limit(0);
ob_clean();
flush();
@readfile($completefilename); exit;
$ completefilename是一个像“ftp://user:pwd@ ...”
的流数据大小可以是几MByte。它运行正常,但偶尔会出现以下错误:
答案 0 :(得分:2)
最有可能的是,远程流偶尔会关闭或超时。
同样正如@fab所说,您尝试加载的文件可能比脚本的内存大。
您应该开始记录错误readfile()
返回,例如使用error_log
php.ini directive。
如果这需要完全万无一失,我认为你必须使用比readfile()
更精致的东西,允许设置超时(如curl
或readfile
{ {3}})。
然后,您可以捕获下载时发生的任何错误,并提供本地托管的后备文档。该文件可以例如是一个文本文件,其中包含消息“资源xyz无法加载”。
答案 1 :(得分:1)
您的错误日志中有什么内容吗? 也许PHP内存不足,因为readfile()需要将while文件拉入内存。确保memory_limit大于使用readfile()处理的最大文件。另一种选择是使用fread()以块的形式输出文件。