Преобразование документов в PDF с использованием unoconv через Symphony Process Component - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь преобразовать текстовые документы в PDF, используя unoconv в PHP. Когда я запускаю следующую команду в CLI, она работает без ошибок:

export HOME=/tmp/converts && unoconv -f pdf -o ~/da063764384fb612971bfc92c52c40fc.pdf ~/da063764384fb612971bfc92c52c40fc.docx

Но проблема в том, что я пытаюсь запустить его на PHP следующим образом:

$env  = ['PATH' => '/sbin:/bin:/usr/sbin:/usr/bin'];
$bash = "export HOME=${tmpDir} && /usr/bin/unoconv -f pdf -o ~/${fileName}.pdf $srcFile";$process = new Process($bash);
$process->setTimeout(120);
$process->run(null, $env);

$output = "\nOutput: " . $process->getOutput();
$error  = "\nError: " . $process->getErrorOutput();

Результаты:

Output:
Error: unoconv: RuntimeException during import phase: Office probably died. Binary URP bridge disposed during call

Кто-нибудь знает, как я могу решить проблему!?

1 Ответ

0 голосов
/ 15 января 2019

unoconv порождает дочерний процесс libreOffice, а затем подключается к этому процессу через порт 2002. странным образом порт никогда не меняется. Поэтому unoconv не может работать параллельно, если у вас запущен один экземпляр, все остальные выходят из строя. Это было то, что произошло на моем сервере.

Я выполнил команду CLI, чтобы найти все процессы libreOffice:

ps aux | grep libre

Затем убил этот процесс, запустив:

ps aux | grep -i libre | awk {'print $2'} | xargs kill -9

Вообще говоря, использование другого инструмента (ов), который поддерживает многопоточность, является лучшим решением для таких случаев.

...