Мне нужен PhpWord для создания docx файла на основе шаблона.
Скачиваю PhpWord с
гитхаба, жму зеленую кнопку "Code" и выбираю Download ZIP. В архиве из папки src беру папку PhpWord и загружаю ее на хостинг. Загружаю в папку PhpWord файл шаблона template.docx, в тексте которого, в нужном месте добавлена переменная ${day} - вместо этой переменной собираюсь вставить дату в шаблон. На просторах интернета нашел следующий код, датированный 2017 годом:
require_once('vendor/autoload.php'); // ставится ТОЛЬКО через Composer!
$_doc = new \PhpOffice\PhpWord\TemplateProcessor('Template.docx');
$_doc->setValue('d_num', '10/29-77-Ю'); //номер договора
// вывод непосредственно в браузер
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment;filename="dogovor.docx"');
header('Cache-Control: max-age=0');
$_doc->saveAs('php://output');
die;
У меня обычный шаред хостинг, Composer это не для моего случая, на сколько понял. Код выше привел к такому виду:
<?php
$_doc = new \TemplateProcessor('template.docx');
$_doc->setValue('day', '20'); //день
// вывод непосредственно в браузер
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment;filename="template2.docx"');
header('Cache-Control: max-age=0');
$_doc->saveAs('php://output');
die;
?>
Запускаю файл с этим кодом и получаю ошибку:
Fatal error: Uncaught Error: Class 'TemplateProcessor' not found in ...
На этой странице упоминается загрузчик класса PHP и код, который я поместил в свой файл:
<?php
$GLOBALS['class_path'] = array(__DIR__ . '/lib', __DIR__);
// Set-up class_path superglobal variable using php include_path as basis
if (!array_key_exists('class_path', $GLOBALS)) {
$GLOBALS['class_path'] = array();
foreach (explode(PATH_SEPARATOR, get_include_path()) as $path) {
// substitute __DIR__ path for '.' instead
if ($path == '.') {
array_push( $GLOBALS['class_path'], realpath(__DIR__) );
continue;
}
array_push( $GLOBALS['class_path'], realpath($path) );
}
}
if (!function_exists('import')):
function import($package = '') {
if (empty($package)) {
trigger_error("Package path must be specified.", E_USER_ERROR);
}
$package_bits = explode('\\', $package);
$package_path = implode(DIRECTORY_SEPARATOR, $package_bits) . '.php';
foreach ($GLOBALS['class_path'] as $path) {
$file = $path . DIRECTORY_SEPARATOR . $package_path;
if (file_exists($file)) {
require_once($file);
$entity_name = implode('\\', $package_bits);
if (!(class_exists($entity_name, false) ||
interface_exists($entity_name, false)
|| trait_exists($entity_name, false))) {
$caller = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0];
trigger_error("Entity '" . $package . "' not found in file '" . $package_path . "' for import called in " .
$caller['file'] . " on line " . $caller['line'], E_USER_ERROR);
}
return;
}
}
}
endif;
spl_autoload_register('import');
$_doc = new \TemplateProcessor('template.docx');
$_doc->setValue('day', '20'); //день
// вывод непосредственно в браузер
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment;filename="template2.docx"');
header('Cache-Control: max-age=0');
$_doc->saveAs('php://output');
die;
?>
Проделанное не помогло и ошибка никуда не делась. На той же странице говорится:
обязательно используйте" use " по мере необходимости, прежде чем пытаться создать экземпляр PHPWord
- как его использовать? Найденная мною информация датируется 2014 или 2017 годом и мне не помогла, возможно я что то делаю не так. Подскажите пожалуйста, как запустить последнюю версию PhpWord на шаред хостинге.