繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM