0

我正在尝试使用 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

任何人都知道我该如何解决这个问题!?

4

1 回答 1

0

unoconv 生成一个 libreOffice 子进程,然后通过端口 2002 连接到该进程。奇怪的是,端口永远不会改变。因此 unoconv 不能并行运行,如果您有一个实例运行所有其他实例都失败。这就是我的服务器上发生的事情。

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

ps aux | grep libre

然后通过运行杀死这些进程:

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

一般来说,对于这种情况,使用其他支持多线程的工具是更好的解决方案。

于 2019-01-15T12:22:53.707 回答