我正在使用以下PHP脚本下载20mb文件:
(文件路径和文件名在脚本中先前设置)
$fullPath = $filepath.$filename;
if ($fd = fopen($fullPath, "r")) {
// http headers for zip downloads
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($fullPath));
while(!feof($fd)) {
echo(fread($fd, 1024*8));
flush();
if (connection_status()!=0) {
fclose($fd);
die();
}
}
}
fclose($fd);
exit();
如果下载完成,它可以正常工作,但是如果用户取消了下载,并且他们点击链接重新下载,则服务器几分钟内完全没有响应,然后下载将开始。看起来它正在等待脚本超时...但是不是“if(connection_status()!= 0)...”部分应该打开脚本吗?
非常感谢任何帮助!提前谢谢!
答案 0 :(得分:-1)
我认为你在某种程度上过度设计了你的解决方案。尝试使用readfile()而不是fopen / fread循环。
更好的是,除非有令人信服的理由说明为什么需要PHP来调解文件传输,所以根本不要使用PHP脚本,只需提供指向相关文件的直接链接即可。
最好的代码始终是您不必编写的代码。