Библиотека PHP Word: как сделать так, чтобы скрипт не перезаписывал, а дополнял созданный docx?
Написал парсер, хочу циклом записывать получаемые данные в .docx файл. Использую библиотеку PHP Word.
Обработка и загрузка данных производится не одним пуском программы. Скрипт отработал - пауза - запустили снова, еще некоторое кол-во информации обработал и тд (пришлось так сделать из-за лимитов по запросам). Так же порционно он должен записывать в docx. Вот код:
Создаю экземпляр класса PHP Word:
$phpWord = new \PhpOffice\PhpWord\PhpWord();
PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true);
$section = $phpWord->addSection(array('lineNumbering' => 'newPage'));
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
Дальше в цикле foreach() получаю xml и готовлю их к записи. Наконец, записываю:
if($key === 0) {
$section->addText('Отчет по публикациям информационного агентства');
}
$section->addText($res);
$section->addText($lo);
$section->addTextBreak();
$objWriter->save('helloWorld.docx');
Первый проход цикла успешно записывает информацию, но следующий, вместо того, чтобы записать ниже продолжение - удаляет старое и поверх записывает новое. Подскажите, пожалуйста, как записать новое ниже уже имеющейся в файле информации.
На каждом проходе цикла в $res и $lo кладутся новые значения - url и заголовки..
Опробованные алгоритмы дозаписи, которые не сработали:
1) if($key === 0) {
$section->addText('Отчет по публикациям информационного агентства');
$section->addText($res);
$section->addText($lo);
$section->addTextBreak();
$objWriter->save('helloWorld.docx');
}
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('helloWorld.docx');
$templateProcessor->addText($res);
$templateProcessor->addText($lo);
$templateProcessor->saveAs('helloWorld.docx');
if($key === 0) { $section->addText('Отчет по публикациям информационного агентства');
$section->addText($res); $section->addText($lo); $section->addTextBreak(); $objWriter->save('helloWorld.docx'); } $fragment = $phpWord->addSection(); $fragment->addText('ПРИВЕТ, ВСЕ РАБОТАЕТ НОРМАЛЬНО'); $objWriter->save('helloWorld.docx'); sleep(30);}
Полный код, как он есть
$tmp = array_slice($matches[0], $_SESSION["time"], -1, true);
$phpWord = new \PhpOffice\PhpWord\PhpWord();
PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true);
$section = $phpWord->addSection();
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
foreach ($tmp as $key => $value) {
if (is_string($value)) {
/*var_dump(substr($value, 21));*/
$cut = $value;
$output = 'https://yandex.ru/search/xml?user=&key=&query=' . urlencode($cut) . '&lr==ru&sortby=&filter=none&maxpassages=5&groupby=ocs-in-group%3D3';
$result = file_get_contents($output);
$al = simplexml_load_string($result);
$clay = $al->{'response'}->results->grouping->group[0]->doc->title->hlword;
echo '<pre>';
print_r($al);
echo '<pre>';
foreach ($clay as $sd) {
$arr[] = '' . $sd . '';
}
$res = implode(" ", $arr);
$arr = [];
$lo = $al->{'response'}->results->grouping->group[0]->doc->url;
if($key === 0) {
$section->addText('Отчет по публикациям информационного агентства');
}
$section->addText($res);
$section->addText($lo);
$section->addTextBreak();
$objWriter->save('helloWorld.docx');
if($key % 3 == 1) {
$key = $key + 1;
break;
}
}
$_SESSION["time"] = $key;