4

我有一个服务器,它运行一个我们用来创建 .docx 的小应用程序。

它在旧服务器上运行良好,但我不得不将它移到另一台服务器上,现在它有一个很大的问题:当我运行我的 php 脚本时 - 基于 PHPWord - 输出文件已损坏且无法使用(MS Word 报告“文件 xyz.docx 无法打开,因为内容存在问题)。

将文件扩展名从 .docx 更改为 .zip(只是为了查看其内容)也无济于事。

这个问题“有趣”的一面是,在同一台服务器上,使用相同版本的 PHP,使用 nginx 1.2.3 它消失了,.docx 文件很完美(好吧,如果不关心内容......但这是另一个问题......)。

我可以打开 nginx,但我有一个不同的问题:我无法按预期读取 Latin1 特殊字符。

google了半天的代码,发现问题出在PHPWord的Template.php库中的下面一行,第105行:$this->_objZip->addFromString('word/document .xml', $this->_documentXML);

它显然工作正常(在 nginx 上它确实工作正常),但它会产生一个假的 .docx,无法打开。

我尝试了不同版本的 apache 服务器,但没有成功,所以我非常感谢任何帮助。

总结:

  • 我在 Windows Server 2003 主机和 php 5.2.8 上测试了我的脚本(使用 PHPWord)
  • 它适用于 nginx
  • 它使用 apache 生成一个错误的 .docx 文件(ZipArchive addFromString 不起作用)
  • 我使用几个 Apache 版本对其进行了测试,从 2.0.64 到 2.2.25
  • 我看不到任何错误信息

任何想法?

4

1 回答 1

0

您可以使用 PclZip 代替 ZipArchive。

示例代码

\PhpOffice\PhpWord\Settings::setZipClass(\PhpOffice\PhpWord\Settings::PCLZIP);
于 2016-07-01T10:57:40.313 回答