ZipArchive addFromString не работает должным образом в Windows

У меня есть сервер, на котором работает небольшое приложение, которое мы используем для создания .docx.

Он отлично работал на старом сервере, но мне пришлось переместить его на другой, и теперь у него есть большая проблема: когда я запускаю свой php-скрипт на основе PHPWord, выходные файлы повреждены и не могут быть использованы (MS Word сообщает «The файл xyz.docx не открывается из-за проблем с содержимым).

Также не помогает изменение расширения файла с .docx на .zip (просто чтобы взглянуть на его содержимое).

«Смешная» сторона этой проблемы заключается в том, что на том же сервере, с той же версией PHP, с nginx 1.2.3 он исчезает, а файл .docx идеален (хорошо, если не заботиться о содержании... но это уже другая проблема...).

Я мог бы включить nginx, но у меня другая проблема: я не могу читать специальные символы Latin1, как ожидалось.

После долгого поиска кода в Google я обнаружил, что проблема связана со следующей строкой, содержащейся в библиотеке Template.php PHPWord, строка 105: $this->_objZip->addFromString('word/document .xml', $this->_documentXML);

Очевидно, он работает нормально (и на nginx он действительно работает), но создает поддельный .docx, который невозможно открыть.

Я безуспешно пробовал разные версии сервера apache, поэтому буду очень признателен за любую помощь.

Резюмируя:

  • Я протестировал свой скрипт (который использует PHPWord) на хосте Windows Server 2003 и php 5.2.8.
  • С nginx работает нормально
  • Он создает плохой файл .docx с apache (ZipArchive addFromString не работает)
  • Я протестировал его, используя несколько версий Apache, от 2.0.64 до 2.2.25.
  • Я не вижу сообщения об ошибке

Есть идеи?


person luca3003    schedule 02.12.2014    source источник


Ответы (1)


Вы можете использовать PclZip вместо ZipArchive.

Пример кода:

\PhpOffice\PhpWord\Settings::setZipClass(\PhpOffice\PhpWord\Settings::PCLZIP);
person Progi1984    schedule 01.07.2016