我通过apache通过php提供文件。我有一个问题,相对较大的文件(我正在使用350 MB的zip)似乎一直在下载,但在客户端上它们显示为零字节文件。
一次只提供一个文件,并且提供的唯一文件是zip文件。我对小文件没有任何问题。 (例如70MB)。我已经把时间和内存限制提高到看似过于慷慨的值(在php和php.ini中)。大约20-30秒之后它似乎已经完成了下载,但在Firefox和Chrome中都没有取得好成绩:
Firefox:没有错误消息。弹出对话框以保存或打开。它保存为零字节文件。如果告诉打开,winzip会提供错误消息,指出文件已损坏。 Chrome:大约20秒后,它显示“此网页不可用”并显示。它还说“错误代码:ERR_CONTENT_LENGTH_MISMATCH”
我不知道这是否意味着什么,但我看了Chrome的开发工具中的网络活动,以及70MB文件在状态正确提供后显示为(已取消)。
这是php代码:
ini_set('memory_limit', '500M'); //also see memory_limit in php.ini
set_time_limit(60); //also max_execution_time in php.ini
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream'); //also tried application/zip
header('Content-Disposition: inline; filename='.basename($fileLocation));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileLocation));
ob_clean();
flush();
readfile($fileLocation);
exit;
谢谢!
答案 0 :(得分:1)
在60秒内下载350 MB(你的时间限制)变成每秒5,8 MB。对我来说很有挑战性。只需更改时间限制:
set_time_limit(60*30); //also max_execution_time in php.ini