php压缩文件下载后损坏,PHP ZipArchive在Windows中损坏
我正在使用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中损坏相关推荐
- php压缩文件下载后损坏,php下载压缩文件
压缩文件是正常的,但是下载到本地就提示损坏,打不开,但是随便创建一个压缩文件下载又是正常的 $froot = dirname($_SERVER['DOCUMENT_ROOT']) . '/upzip/ ...
- delphi 到出execl2010 文件损坏_如何修复Linux中损坏的软件包?
[51CTO.com快译]Apt和DNF等Linux软件包管理器功能异常强大.界面异常直观,但这并不意味着就不会出岔子.有时软件包安装会出问题,您得收拾残局.软件包管理器能够修复损坏的软件包并跳过损坏 ...
- 怎么损坏mysql_如何修复MySQL中损坏的表
本指南旨在用作诊断MySQL设置时的故障排除资源和起点. 我们将讨论许多MySQL用户遇到的一些问题,并提供解决特定问题的指导. 我们还将包含指向DigitalOcean教程的链接以及在某些情况下可能 ...
- 禁用nouveau后黑屏_在Windows中禁用自适应亮度以修复黑屏问题
禁用nouveau后黑屏 If you just installed Windows 8 or Windows 10 on your laptop and the screen won't stay ...
- java文件下载文件损坏_Springboot实现文件下载,文件下载后损坏
场景描述 使用Springboot实现了一个文件下载的功能,代码如下 String fileName = "template.xls"; res.setHeader("C ...
- js 导出pdf上传至oss_前端上传图片到oss,压缩图片后上传至oss(补充图片文件旋转90度问题)...
上传图片如果过大,等待时间过长体验不好,于是使用js压缩图片再上传,无关图片清晰度. /** * 压缩图片 * @param file 图片文件 * @param callback 回调函数,压缩完要 ...
- 迅雷x下载的东西都变成php格式化,关于文件下载后变成PHP格式的解决办法
关于文件下载后变成PHP格式的解决办法 首先我们要知道,PHP格式的是一种动态的网页,它并不是你原先想要下载的文件(附件资料).其实这是因为大家使用了迅雷或其它下载工具,下载软件解析下载地址时造成的错 ...
- 关于压缩文件后删除源文件的一点问题
近期在项目中,需要压缩文件,同时压缩文件后需要删除源文件, public static boolean fileToZip(String sourceFilePath,String zipFilePa ...
- 工具介绍:js-beautify,整理压缩混淆后的js,html,css
js-beautify 在阅读别的网站的html,js,css时,有的网站做了代码混淆,如何阅读这样的代码?js-beautify是一个转换压缩混淆后的html,js,css代码,增加代码可读性的一个 ...
最新文章
- linux Centos6.5使用yum安装mysql
- Nginx如何反向代理网站和设置虚拟主机
- 【LuKS】Vba if not c is nothing
- 关于C#中使用SQLDMO来获取数据库中的一些操作
- DISCUZ中判断当前页是否是门户首页
- 新文速递 | 盒装数据:一种基于数据盒的数据产品形态
- 生活在信息世界,人人都该懂得大数据概念
- 用 Maven 做项目构建
- sqlmap md5怎么解密_UC浏览器代理流量解密
- 成年男女间存在真正的友谊吗?
- LOJ #6268. 分拆数
- 手机12306买卧铺下铺技巧_12306网上购下铺技巧(亲历版)
- Android 11 正式发布:更方便的操作和更安全的隐私
- Android Studio将本地计算机文件上传到模拟器scard文件中,显示不出
- 数字网络监控系统解决方案1
- 正方教务系统php登陆,正方教务管理系统最新版无条件注入GetShell | wooyun-2015-0122523| WooYun.org...
- 用 gcc生成静态库和动态库以及静态库和动态库的使用
- 如何使用AirPods Pro 更换取下和安装耳塞
- mysql服务器默认使用用户_在Windows下配置MySql服务器默认使用的用户是
- English Grammer-01