我正在尝试使用 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
任何人都知道我该如何解决这个问题!?
unoconv 产生一个子 libreOffice 进程,然后通过端口 2002 连接到该进程。奇怪的是,端口从未改变。因此,如果您有一个实例运行所有其他实例失败,则 unoconv 无法并行运行。那是我服务器上发生的事情。
我在 CLI 上运行 bellow 命令来查找所有 libreOffice 进程:
ps aux | grep libre
然后通过运行杀死这些进程:
ps aux | grep -i libre | awk {'print $2'} | xargs kill -9
一般来说,对于这种情况,使用支持多线程的其他工具是更好的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句