通过Symphony Process Component使用

时间:2019-01-14 13:23:32

标签: nginx php-7 libreoffice converters unoconv

我正在尝试使用PHP中的unoconv将Word文档转换为PDF。当我在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 :(得分:0)

unoconv产生一个子libreOffice进程,然后通过端口2002连接到该进程。奇怪的是,端口从未更改。因此,如果您有一个实例运行所有其他实例,则unoconv无法并行运行。那就是我服务器上发生的事情。

我在CLI上运行bellow命令以查找所有libreOffice进程:

ps aux | grep libre

然后通过运行以下命令杀死那些进程:

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

通常来说,对于这种情况,使用支持多踩的另一种工具是更好的解决方案。