[英]PHP: readfile() returns zip file with 0 bytes
我创建了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从大文件中读取0个字节? ”-结果是,下载后的zip现在具有一定大小(不再为0个字节),并且其中包含所有正确的内容,看起来一切正常,但是zip无效,无法正常解压缩和打开。 在Win8中,当尝试打开下载的zip文件时,出现以下错误: The Compresed (zipped) Folder zipfile.zip is invalid.
。 当然,原始的zip文件可以正常工作。 WinRAR显示此错误: zipfile.zip: Unexpected end of archive
。 看起来,描述了同样的问题在这篇文章中 ,没有任何可行的解决方案。
尝试添加ob_end_flush(); 在readfile($ filePath)之前; 。 它
最简单的解决方案是完全取消php,仅提供指向zip的HTML链接,然后让您的服务器完成工作
另外,如果您真的必须坚持使用php来实现此目的,那么那里没有将文件实际发送给用户的代码,readfile不会这样做,它只是将其加载到程序中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.