Libreoffice 无法在 php 运行时启动

Posted

技术标签:

【中文标题】Libreoffice 无法在 php 运行时启动【英文标题】:Libreoffice cannot be started at runtime in php 【发布时间】:2020-02-26 12:21:44 【问题描述】:

我已经在我的64 bit Windows 7 OS 上安装了LibreOffice 第 6 版。 如果我尝试将.docx.pdf 转换为.pdf,它就可以正常工作。但是如果我尝试从laravel执行命令,它会报告应用程序无法启动。

Laravel 代码

$process = new Process('"C:\Program Files\LibreOffice\program\soffice.exe" --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_$USER" -convert-to pdf --outdir D:\converted\ D:\acceptance.docx');

$process->run();

错误信息

这个有什么解决办法吗?

【问题讨论】:

Laravel 是否可以访问上述 INI 文件? 我如何发现它可以从 laravel 中访问..? 您可能想运行任何其他程序而不是 LibreOffice 并让它打开该文件,例如编辑器。 对不起,我听不懂.. 您拥有 LibreOffice 进程的构造函数。例如,将其替换为:new Process('C:\Windows\notepad.exe "C:\Program Files\LibreOffice\program\bootstrap.ini"'); 【参考方案1】:

该错误非常令人困惑,因为它不仅发生在磁盘上的bootstrap.ini 文件无效时,而且还发生在调用soffice.exe 时错误地覆盖-env 变量时。因为 LibreOffice 会在运行时在内存中覆盖环境变量后验证 bootstrap.ini 文件的内容。 THANK YOU LIBREOFFICE FOR SUCH A MISLEADING ERROR哈哈。

我在某个时候遇到了同样的错误并进行了一些调查,直到我注意到我为 -env:UserInstallation 设置的值不正确。 在您的情况下,参数被传递给 Process 初始化程序,如下所示:

'"C:\Program Files\LibreOffice\program\soffice.exe" --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_$USER" -convert-to pdf --outdir D:\converted\ D:\acceptance.docx'

它看起来像$USER 意味着是一个环境变量。如果您使用硬编码路径测试 Process 可能会有所帮助。为了实现这一点,您可以将 "-env:UserInstallation=..." 位更改为 -env:UserInstallation=file:///C:/tmp/LibreOffice_Conversion_abc。请注意,我还在路径中添加了驱动器 C: 字母,因为您的操作系统是 Windows。确保此路径存在并对其进行测试。如果它有效,那么您可以专注于以您希望的方式正确地提出论点。

如果您还没有,请查看以下页面以获取适用于 Windows 和 Linux/Unix 的 file URI scheme:https://en.wikipedia.org/wiki/File_URI_scheme

【讨论】:

以上是关于Libreoffice 无法在 php 运行时启动的主要内容,如果未能解决你的问题,请参考以下文章

无法在端口 2002 上连接 LibreOffice?

Apache/PHP + LibreOffice

无法在 LibreOffice 中运行 Python 宏

无法使 LibreOffice 在线构建

在 Windows PHP exec() 上运行(生成 PDF)soffice LibreOffice 不起作用

Libreoffice --headless 拒绝转换,除非是 root,不能在 PHP 脚本中工作