在 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?