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

Posted

技术标签:

【中文标题】在 Windows PHP exec() 上运行(生成 PDF)soffice LibreOffice 不起作用【英文标题】:Running (Generate PDF) soffice LibreOffice on Windows PHP exec() doesn't work 【发布时间】:2019-03-19 15:00:51 【问题描述】:

我正在尝试使用 soffice 从 docx 生成 pdf,因此我在 apache linux 及其工作原理上进行尝试,但我在 windows server 2012 和 IIS 6.2 中尝试。

如果我在 CMD 上运行此命令,它的工作原理:

soffice --headless --convert-to pdf:writer_pdf_Export --outdir  ../../storage/app/ACTIVO/2019-03/3404/docx/ ../../storage/app/ACTIVO/2019-03/3404/docx/documento_word.docx

所以在 php 中我试试这个:

$comando = 'soffice --headless --convert-to pdf:writer_pdf_Export --outdir  ../../storage/app/ACTIVO/2019-03/3404/docx/ ../../storage/app/ACTIVO/2019-03/3404/docx/documento_word.docx';
$var = exec($comando);
var_dump($var);

它给我“NULL”

当我尝试在 PHP 中使用 soffice --version 时也会发生同样的情况。

我在 C:\Program Files\Libreoffice 中授予 IUSR 完全权限,并且 storage/app 也有权限。在 IIS 中启用了匿名身份验证。

我在 php 中运行,它的返回 "string(26) "iis apppool\defaultapppool" "

$var = exec('whoami');
var_dump($var);

我不知道我该怎么做才能解决它。

【问题讨论】:

【参考方案1】:

我解决了这个问题,在 Windows 中创建了一个新用户,该用户运行类似该用户的命令的权限较低。 一世 nstallSysinternalsSuite运行psexec命令,zip解压到C:\

所以,我改变的那一行是:

$comando = 'soffice --headless --convert-to pdf:writer_pdf_Export --outdir  ../../storage/app/ACTIVO/2019-03/3404/docx/ ../../storage/app/ACTIVO/2019-03/3404/docx/documento_word.docx';

到:

$comando = '"C:\SysinternalsSuite\psexec.exe" -u DOMAIN\USER -p PASSWORD "C:\Program Files\LibreOffice\program\soffice.exe" --headless --convert-to pdf:writer_pdf_Export --outdir  C:\inetpub\wwwroot\storage\app\ACTIVO\2019-03\3404\docx\ C:\inetpub\wwwroot\storage\app\ACTIVO\2019-03\3404\docx\documento_word.docx';

【讨论】:

以上是关于在 Windows PHP exec() 上运行(生成 PDF)soffice LibreOffice 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在linux上调用php exec函数

php exec:不返回输出

为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?

在计算引擎上从 PHP 的 exec() 调用时,gsutil 不起作用

无法使用 PHP exec 运行 gsutil

如何配置服务器的php,使得能成功运行exec函数?