3

我们现在使用libreoffice --headless了一段时间,首先是通过 Debian,在过去的几个月里我们切换到了 CentOS。我们正在使用Symfony Process命令将 a 转换docxpdf,简化的命令如下所示:

libreoffice --headless --convert-to pdf \ 
    --outdir /home/conversionoutdir \
    /home/conversionindir/4f00ac05aee274967b.docx

执行上述命令的 Symfony 进程非常简单:

    $process = new Process($cmd);
    $process->mustRun();

一切正常,但几天后转换不再完成,并且该过程一直处于等待状态,直到达到 60 秒超时。

通过在我们的服务器上进行完全相同的转换来调试它DEV,一切都很好。还尝试转换大小文档,以查看或达到超时的页数。是否也直接在命令行上执行了命令,转换也可以并在几秒钟内完成。

异常被我们的应用程序捕获,并被发送到记录器:

进程 \"/usr/bin/libreoffice --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir /home/conversionoutdir /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);
4

1 回答 1

4

找到了解决这个问题的方法,不知何故 linux 的HOME变量被更改为/rootlibreoffice 无法转换到该路径。也许这在重新启动 Apache 时以某种方式发生了变化。

解决方案是始终让 PHP 设置/tmpHOME变量:

putenv('HOME=/tmp');

以下帖子提供了更多信息:

于 2016-03-11T12:14:25.717 回答