0

我通过 apache 通过 php 提供文件。我遇到了一个问题,相对较大的文件(我正在处理 350 MB zip)似乎一直在下载,但在客户端上它们显示为零字节文件。

一次只提供一个文件,并且提供的唯一文件是 zip 文件。我对较小的文件没有问题。(例如 70MB)。我已经将时间和内存限制提高到看似过于慷慨的值(在 php 和 php.ini 中)。大约 20-30 秒后,它似乎完成了下载,但在 Firefox 和 Chrome 中,都没有好的结果:

火狐:没有错误信息。弹出对话框保存或打开。它保存为零字节文件。如果被告知打开,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;

谢谢!

4

1 回答 1

1

在 60 秒内下载 350 MB(您的时间限制是多少)变成每秒 5,8 MB。对我来说听起来很有挑战性。只需更改您的时间限制:

set_time_limit(60*30);  //also max_execution_time in php.ini
于 2013-09-12T10:42:24.290 回答