PHP:readfile()返回0字节的zip文件

时间:2014-11-23 00:42:26

标签: php readfile

我创建了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描述的问题相同,没有任何可行的解决方案。

2 个答案:

答案 0 :(得分:1)

尝试添加ob_end_flush();在readfile之前($ filePath); 。它

答案 1 :(得分:0)

最简单的解决方案是完全取消php,只需提供一个zip链接,让服务器完成工作

如果你真的必须坚持使用php来提供服务,那么你没有实际将文件发送给用户的代码,readfile没有这样做只是将它加载到程序中