我创建了php脚本以允许用户下载zip文件。 脚本看起来像:
$filePath = '/path/to/zipfile.zip'; // file is below /public_html/ directory
if(file_exists($filePath)) {
$fileName = basename($filePath);
$fileSize = filesize($filePath); //returns: 26494938
header("Content-Type: application/zip");
header("Content-Length: ".$fileSize);
header("Content-Disposition: attachment; filename=".$fileName);
readfile($filePath);
die;
};
我希望这个脚本能够通过zipfile.zip
进行下载。它确实,弹出保存对话框,我选择保存位置,按保存和zip文件保存。除了一件重要的事情 - 文件是0字节,它是完全空的zip文件。原始zip文件已满文件(约25Mb)。也许尺寸是问题?
有人可以帮忙提一些建议吗?文件路径是正确的。我怀疑这个问题很可能与readfile()
函数和/或zip文件大小有关,如果有的话,readfile()
会有什么替代方法可行吗?谢谢!
更新:我尝试使用此帖中提到的功能readfile_chunked
:" Readfile reads 0 bytes from large file?" - 结果是下载后的zip现在有一些大小(不再是0字节)和里面所有正确的内容,看起来一切正常,但是zip无效,并且无法正常解压缩和打开。在Win8中尝试打开下载的zip文件时,我收到此错误:The Compresed (zipped) Folder zipfile.zip is invalid.
。当然原始的zip文件工作正常。 WinRAR显示此错误:zipfile.zip: Unexpected end of archive
。它看起来与in this post描述的问题相同,没有任何可行的解决方案。
答案 0 :(得分:1)
尝试添加ob_end_flush();在readfile之前($ filePath); 。它
答案 1 :(得分:0)
最简单的解决方案是完全取消php,只需提供一个zip链接,让服务器完成工作
如果你真的必须坚持使用php来提供服务,那么你没有实际将文件发送给用户的代码,readfile没有这样做只是将它加载到程序中