【发布时间】:2018-10-19 09:59:37
【问题描述】:
我在使用 LibreOffice 5.4.6 中的 soffice.exe 将 Word 文档转换为 PDF 时遇到问题 - 通过 IIS 在 Windows Server 2012 R2 上运行。
在PHP(chdir)中将目录更改为相关的LibreOffice程序目录后,我在PHP中调用的命令是:
$cmd = "soffice.exe --headless -convert-to pdf -outdir ".sys_get_temp_dir()." ".$workingdoc;
exec($cmd);
其中 $workingdoc 是 .docx Word 文件的完整路径。
sys_get_temp_dir() 在我的系统上转换为 C:\Windows\Temp
如果我将 $cmd 变量回显到浏览器,然后将该输出复制粘贴到服务器上交互的 cmd.exe 命令提示符中,则生成 PDF 时不会出现问题。
例如,我复制粘贴到 cmd.exe 提示符中的回显 $cmd 可能是:
soffice.exe --headless -convert-to pdf -outdir C:\Windows\TEMP C:\Windows\Temp\pdD125.docx
但是,通过 exec() 从 PHP 运行这个 $cmd 变量,与我以交互方式启动 cmd.exe 的用户上下文相同,只是挂起。我可以在任务管理器中看到 soffice.exe,RAM 使用量在 10-20MB 之间徘徊。此外,在我的 C:\Windows\Temp 文件夹中,我每秒连续创建多个空文件夹,同时 soffice.exe 仍在运行,所有文件夹的名称格式为 lu*.tmp
例如,生成的众多文件夹之一是 lu1124fq1pud.tmp
PDF 没有被创建,并且允许 PHP 脚本完成并停止正在创建的 lu 文件夹的唯一方法是强制结束 soffice.exe 任务任务管理器。
那么,为什么 soffice.exe 命令在从 cmd.exe 调用时有效,而不是通过 PHP,即使通过这两种方法在相同的用户上下文中启动它们?
【问题讨论】:
-
你找到解决这个问题的方法了吗?我遇到了和你描述的完全一样的问题
标签: php windows iis libreoffice