我正在使用PHP的ZipArchive类来创建一个包含照片的zip文件,然后将其提供给浏览器进行下载。这是我的代码:

/**

* Grabs the order, packages the files, and serves them up for download.

*

* @param string $intEntryID

* @return void

* @author Jesse Bunch

*/

public static function download_order_by_entry_id($intUniqueID) {

$objCustomer = PhotoCustomer::get_customer_by_unique_id($intUniqueID);

if ($objCustomer):

if (!class_exists('ZipArchive')):

trigger_error('ZipArchive Class does not exist', E_USER_ERROR);

endif;

$objZip = new ZipArchive();

$strZipFilename = sprintf('%s/application/tmp/%s-%s.zip', $_SERVER['DOCUMENT_ROOT'], $objCustomer->getEntryID(), time());

if ($objZip->open($strZipFilename, ZIPARCHIVE::CREATE) !== TRUE):

trigger_error('Unable to create zip archive', E_USER_ERROR);

endif;

foreach($objCustomer->arrPhotosRequested as $objPhoto):

$filename = PhotoCart::replace_ee_file_dir_in_string($objPhoto->strHighRes);

$objZip->addFile($filename,sprintf('/press_photos/%s-%s', $objPhoto->getEntryID(), basename($filename)));

endforeach;

$objZip->close();

header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($strZipFilename)).' GMT', TRUE, 200);

header('Cache-Control: no-cache', TRUE);

header('Pragma: Public', TRUE);

header('Expires: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT', TRUE);

header('Content-Length: '.filesize($strZipFilename), TRUE);

header('Content-disposition: attachment; filename=press_photos.zip', TRUE);

header('Content-Type: application/octet-stream', TRUE);

ob_start();

readfile($strZipFilename);

ob_end_flush();

exit;

else:

trigger_error('Invalid Customer', E_USER_ERROR);

endif;

}

这个代码对所有的浏览器都很好,但IE。在IE中,文件正确下载,但zip存档为空。当尝试提取文件时,Windows会告诉我zip存档已损坏。有人有这个问题吗?

编辑更新:从@profitphp的建议之后,我更改了我的头文件:

header("Cache-Control: public");

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/zip");

header("Content-Disposition: attachment; filename=\"pressphotos.zip\"");

//header("Content-Transfer-Encoding: binary");

header("Content-length: " . filesize($strZipFilename));

另外,以下是使用Firefox打开Windows后的错误的屏幕截图:

IE和Firefox在Windows上都会出现此错误。它在Mac中正常工作。此外,在Windows中,文件大小似乎是正确的:

编辑#2这个问题是sovled。看下面我的回答

php压缩文件下载后损坏,PHP ZipArchive在Windows中损坏相关推荐

  1. php压缩文件下载后损坏,php下载压缩文件

    压缩文件是正常的,但是下载到本地就提示损坏,打不开,但是随便创建一个压缩文件下载又是正常的 $froot = dirname($_SERVER['DOCUMENT_ROOT']) . '/upzip/ ...

  2. delphi 到出execl2010 文件损坏_如何修复Linux中损坏的软件包?

    [51CTO.com快译]Apt和DNF等Linux软件包管理器功能异常强大.界面异常直观,但这并不意味着就不会出岔子.有时软件包安装会出问题,您得收拾残局.软件包管理器能够修复损坏的软件包并跳过损坏 ...

  3. 怎么损坏mysql_如何修复MySQL中损坏的表

    本指南旨在用作诊断MySQL设置时的故障排除资源和起点. 我们将讨论许多MySQL用户遇到的一些问题,并提供解决特定问题的指导. 我们还将包含指向DigitalOcean教程的链接以及在某些情况下可能 ...

  4. 禁用nouveau后黑屏_在Windows中禁用自适应亮度以修复黑屏问题

    禁用nouveau后黑屏 If you just installed Windows 8 or Windows 10 on your laptop and the screen won't stay ...

  5. java文件下载文件损坏_Springboot实现文件下载,文件下载后损坏

    场景描述 使用Springboot实现了一个文件下载的功能,代码如下 String fileName = "template.xls"; res.setHeader("C ...

  6. js 导出pdf上传至oss_前端上传图片到oss,压缩图片后上传至oss(补充图片文件旋转90度问题)...

    上传图片如果过大,等待时间过长体验不好,于是使用js压缩图片再上传,无关图片清晰度. /** * 压缩图片 * @param file 图片文件 * @param callback 回调函数,压缩完要 ...

  7. 迅雷x下载的东西都变成php格式化,关于文件下载后变成PHP格式的解决办法

    关于文件下载后变成PHP格式的解决办法 首先我们要知道,PHP格式的是一种动态的网页,它并不是你原先想要下载的文件(附件资料).其实这是因为大家使用了迅雷或其它下载工具,下载软件解析下载地址时造成的错 ...

  8. 关于压缩文件后删除源文件的一点问题

    近期在项目中,需要压缩文件,同时压缩文件后需要删除源文件, public static boolean fileToZip(String sourceFilePath,String zipFilePa ...

  9. 工具介绍:js-beautify,整理压缩混淆后的js,html,css

    js-beautify 在阅读别的网站的html,js,css时,有的网站做了代码混淆,如何阅读这样的代码?js-beautify是一个转换压缩混淆后的html,js,css代码,增加代码可读性的一个 ...

最新文章

  1. linux Centos6.5使用yum安装mysql
  2. Nginx如何反向代理网站和设置虚拟主机
  3. 【LuKS】Vba if not c is nothing
  4. 关于C#中使用SQLDMO来获取数据库中的一些操作
  5. DISCUZ中判断当前页是否是门户首页
  6. 新文速递 | 盒装数据:一种基于数据盒的数据产品形态
  7. 生活在信息世界,人人都该懂得大数据概念
  8. 用 Maven 做项目构建
  9. sqlmap md5怎么解密_UC浏览器代理流量解密
  10. 成年男女间存在真正的友谊吗?
  11. LOJ #6268. 分拆数
  12. 手机12306买卧铺下铺技巧_12306网上购下铺技巧(亲历版)
  13. Android 11 正式发布:更方便的操作和更安全的隐私
  14. Android Studio将本地计算机文件上传到模拟器scard文件中,显示不出
  15. 数字网络监控系统解决方案1
  16. 正方教务系统php登陆,正方教务管理系统最新版无条件注入GetShell | wooyun-2015-0122523| WooYun.org...
  17. 用 gcc生成静态库和动态库以及静态库和动态库的使用
  18. 如何使用AirPods Pro 更换取下和安装耳塞
  19. mysql服务器默认使用用户_在Windows下配置MySql服务器默认使用的用户是
  20. English Grammer-01

热门文章

  1. oracle判断单数双数,代码中你所不知道的偶数与奇数的判断方法
  2. IEC104发送序号和接受序号理解
  3. Kubernetes Dashboard集成Heapster
  4. 冷链物流(MBA智库)
  5. 呼叫中心参考资料汇总
  6. layer弹出层示例
  7. 益智游戏网开发之路一(网址yzyx.info)
  8. Mark Something
  9. linux 查找文件夹中含有文件的个数
  10. 有向无环图的最短路径