Столкнулся с такой задачей. Заказчику нужно отправление по почте заявок в формате Word, а именно docx. Ну учитывая что этот формат, это xml запакованный в zip я принял решение, просто брать папку с распакованным docx, в файле document.xml менять текст и паковать снова в zip. Функция приняла такой вид: //Создаем файл заявки $src_dir = www_dir."/lib/word/1/"; $fileName = www_dir."/lib/word/1.docx"; $zip = new ZipArchive(); if (is_dir($src_dir)) { if ($zip->open($fileName, ZIPARCHIVE::CREATE ) == true) { //добавляем файлы в архив все файлы из папки src_dir $dirHandle = opendir($src_dir); $mas=_m_cl::findDirectory($src_dir); foreach($mas as $mas1) { if ($mas1=="/word/document.xml") { $zip->addFromString($mas1, str_replace('ЫВАЫВА',"ФЫВ",file_get_contents($src_dir.$mas1))); } else { $zip->addFile($src_dir.$mas1,$mas1); }; }; }; }; //закрываем архив $zip->close(); Вообщем, все вроде создается, и архив. Который Word не открывает, а пишет ошибку. Но что интересно, если его переименовать в zip, разархивировать тем же WinRar, а потом снова заархивировать в zip, и переименовать в docx, то все отлично открывается в Word. Отсюда следует что ZipArchive создает архив в каком то непонятном для Word формате. Мне важен именно такой подход, поскольку Word можно использовать как редактор шаблонов. Можете подсказать, что не так с ZipArchive, и в каком формате нужно архивировать, чтобы Word видел этот docx?
та не то слово. смотрел инфо файлов отличаются на 1-2% по размеру. степень сжатия одинаковая - 15%. ну что делать? может это денвер под windows странный. сейчас попробую на сервере. Добавлено спустя 9 минут 52 секунды: и на внешнем хостинге тоже самое. не открывает сгенериный на внешнем хостинге docx. переписал на ПК распаковал, запаковал, переименовал - открывает. разница в байтах 15537 - глючный, 16500 - новый что открывается. степень сжатия 12% и там и там.
еперный театр. все разобрался. извиняюсь за беспокойство. переработался ))) в архиве названия файлов сохранял со слешем вначале, типа "/customXml/выаыва/ыва/" а нужно "customXml/выаыва/ыва/" поэтому при распаковке, слеши исчезали и в новом архиве было все ок. дописал процедуру. заработало.
это вы мало шаблонов поклепали .. пока вам везет - почитайте тут мои мучения viewtopic.php?f=2&t=46168 рано или поздно он сделает свое грязное дело =) кстати не помню там писал или нет - на работе в 2007 сохранял - более менее работало .. дома же просто пересохранил все метки слетели и str_replace уже не мог ничего менять ((