从PHP应用程序下载数据的零星错误

时间:2011-04-12 11:13:15

标签: php internet-explorer

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。它运行正常,但偶尔会出现以下错误:

Error

2 个答案:

答案 0 :(得分:2)

最有可能的是,远程流偶尔会关闭或超时。

同样正如@fab所说,您尝试加载的文件可能比脚本的内存大。

您应该开始记录错误readfile()返回,例如使用error_log php.ini directive

如果这需要完全万无一失,我认为你必须使用比readfile()更精致的东西,允许设置超时(如curlreadfile { {3}})。

然后,您可以捕获下载时发生的任何错误,并提供本地托管的后备文档。该文件可以例如是一个文本文件,其中包含消息“资源xyz无法加载”。

答案 1 :(得分:1)

您的错误日志中有什么内容吗? 也许PHP内存不足,因为readfile()需要将while文件拉入内存。确保memory_limit大于使用readfile()处理的最大文件。另一种选择是使用fread()以块的形式输出文件。