【问题标题】:PHP: Zipping files as xlsx causes file to become invalidPHP:将文件压缩为 xlsx 导致文件无效
【发布时间】:2010-10-01 02:14:38
【问题描述】:

我必须替换用户提交的 xlsx 文件中的变量,并且这样做:

  1. 将 .xlsx 重命名为 .zip
  2. 解压到临时文件夹
  3. 进行必要的更改
  4. 压缩文件
  5. 将 .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 Ba​​ker:我可以测试 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


【解决方案1】:

我让它与另一个组件 PclZip (phpconcept.net/pclzip) 一起工作。这是一个显然使用 gzip 的类,在 Excel 2007 中将其输出重命名为 .xlsx 即可。

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多