@IwanIwanow

Как запустить PhpWord на хостинге?

Мне нужен 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 на шаред хостинге.
  • Вопрос задан
  • 618 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы