【发布时间】:2010-10-01 02:14:38
【问题描述】:
我必须替换用户提交的 xlsx 文件中的变量,并且这样做:
- 将 .xlsx 重命名为 .zip
- 解压到临时文件夹
- 进行必要的更改
- 压缩文件
- 将 .zip 重命名为 .xslx
我在 PHP 中使用普通的 ZipArchive。当我尝试在 Excel 中打开生成的 .xlsx 时,它会失败并显示消息 format or extension invalid。当我使用 WinRAR(作为 zip)压缩临时文件并将生成的文件重命名为 .xlsx 时,它可以工作。两种方法生成的 zip 文件包含相同的数据结构和文件,但 WinRAR 文件稍大(10.2K 对 10.3K 正常压缩)。
在查看文件的乱码时,我可以看到文件以不同的顺序出现,但不知道是不是这个原因。任何线索将不胜感激。
【问题讨论】:
-
Zip 允许使用几种不同的压缩方法。可能 Office 不支持生成的 zip,而 WinRar 使用的是受支持的方法。
-
如果您在 Windows 机器上使用 ZipArchive,有一些错误版本的 php_zip.dll 会在写入时创建损坏的 zip
-
感谢您的 cmets - 但我该怎么办? PHP 是否有替代的压缩组件? @Mark Baker:我可以测试 zip 文件的有效性吗?在 WinRAR 中打开 ZipArchive 生成的文件不会引发错误,因此看起来是有效的。
-
在过去 18 个月左右的时间里,这个问题给我造成了很大的冲突。我不知道有什么简单的解决方法可以解决这个问题,除了尝试找到一个相当新的您可以证明有效的 php_zip.dll 版本,并坚持下去。
-
另外,有一个 sourceforge 项目为sourceforge.net/project/showfiles.php?group_id=254316 的 zip/unzip 二进制文件提供兼容的 php 包装器
标签: php zip excel-2007 xlsx ziparchive