Мы используем libreoffice --headless
какое-то время, сначала через Debian, а за последние месяцы мы перешли на CentOS. Мы используем Процесс Symfony Команда для преобразования docx
в pdf
, упрощенная команда выглядит так:
libreoffice --headless --convert-to pdf \
--outdir /home/conversionoutdir \
/home/conversionindir/4f00ac05aee274967b.docx
Процесс Symfony, который выполняет вышеупомянутую команду, довольно прост:
$process = new Process($cmd);
$process->mustRun();
Все работало хорошо, но через пару дней преобразование больше не завершается, и процесс завершается до истечения 60-секундного тайм-аута.
Отлаживали это, делая то же самое преобразование на нашем DEV
сервер, где все просто отлично. Также пытались конвертировать маленькие и большие документы, чтобы увидеть или количество страниц имеет значение для достижения тайм-аута. Также выполнил команду непосредственно в командной строке, где преобразование также в порядке и заканчивается в течение нескольких секунд.
Исключение перехватывается нашим приложением и отправляется регистратору:
Процесс \ «/ usr / bin / libreoffice — без заголовка —nologo —nofirststartwizard —norestore —convert-to pdf: writer_web_pdf_Export —outdir / home / translationoutdir /home/conversionindir/4f00ac05aee274967b.docx \» превысил время 60 секунд.
Похоже, PHP не может отслеживать процесс больше. Что здесь может происходить? Любые подсказки о том, как отладить это дальше?
Редактировать: после абстрагирования компонента процесса Symfony, установив conversionoutdir
Разрешения на 777 и выполнение следующего фрагмента, преобразование все еще остается зависать, если выполняется из PHP:
$output = array();
exec('libreoffice --headless --convert-to pdf \
--outdir /home/conversionoutdir \
/home/conversionindir/4f00ac05aee274967b.docx', $output);
print_r($output);
Нашел решение этой проблемы, как-то Linux HOME
переменная была изменена на /root
и libreoffice не смог выполнить преобразование по этому пути. Может быть, это как-то изменилось при перезапуске Apache.
Решение состоит в том, чтобы всегда позволить PHP установить /tmp
как HOME
переменная:
putenv('HOME=/tmp');
Следующие сообщения предоставляют больше информации:
Других решений пока нет …