Rva*_*aak 4 php symfony libreoffice symfony-process
我们已经使用了libreoffice --headless一段时间,首先是通过 Debian,在过去的几个月里我们切换到了 CentOS。我们使用Symfony Process命令将 a 转换docx为pdf,简化的命令如下所示:
libreoffice --headless --convert-to pdf \
--outdir /home/conversionoutdir \
/home/conversionindir/4f00ac05aee274967b.docx
Run Code Online (Sandbox Code Playgroud)
执行上述命令的 Symfony 进程非常简单:
$process = new Process($cmd);
$process->mustRun();
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,但几天后转换不再完成,该过程将一直等待,直到达到 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);
Run Code Online (Sandbox Code Playgroud)
找到了这个问题的解决方案,不知何故linux的HOME变量被更改为/root并且libreoffice无法转换到该路径。也许这在重新启动 Apache 时发生了某种变化。
解决方案是始终让 PHP 设置/tmp为HOME变量:
putenv('HOME=/tmp');
Run Code Online (Sandbox Code Playgroud)
以下帖子提供了更多信息:
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |