2013-02-24 1 views
1

Я пытаюсь узнать, как модифицировать файлы .docx и .odt с помощью PHP [QueryPath], и когда я запускаю этот скрипт [ниже] из cmd.exe [command line] на WAMP, в командной строке он показывает, что изменения, которые Я хочу, чтобы все было сделано, и все текстовые теги были изменены, но когда я открываю фактический файл docx или его эквивалент xml, ни одно из этих изменений не было сделано. Зачем? И как я могу это исправить? Заранее спасибо.Когда я изменяю файл docx xml [document.xml] с PHP QueryPath 2.1.2, изменения не видимы в фактическом файле test1.docx, почему?

<?php 

require 'src/QueryPath/QueryPath.php'; 

$file = 'zip://test1.docx#word/document.xml'; 

$doc = qp($file); 

foreach($doc->find('w|t') as $item) { 
     $item->text('BLABLABLA')->writeXML(); 
} 


?> 
+1

Вы не пишете изменения обратно в файл ZIP, вы? Протокол 'zip: //' не поддерживает запись –

ответ

2

Из documentation для writeXML:

Написать документ путь к файлу, если задано, или на стандартный вывод (обычно клиент).

Поскольку вы ничего не пропускаете до writeXML, он будет просто отображать измененный XML, а не сохранять его в файле.

Кроме того, вы должны изменить код только позвонить writeXML один раз, в конце сценария, т.е.

$doc->writeXML($filename);

+2

Очень справедливая точка, плюс у него будет дополнительная проблема, что все его изменения будут потеряны, потому что он использует протокол zip: // ', который только читается. –

+0

Какой протокол следует использовать для записи в файл .docx или .odt? Я очень новичок в этом, пожалуйста, помогите мне с примерами кода! Благодаря! – codepreneur

+1

Я не знаю ответа на это, но вам, вероятно, понадобится использовать класс 'ZipArchive' для создания нового zip-файла, а затем сохранить его. См. Http://us3.php.net/manual/en/ziparchive.addfromstring.php –