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 运行时启动的主要内容,如果未能解决你的问题,请参考以下文章