IIS+Windows Server下PHP(Laravel)调用exec执行PDFCreator失败排查
问题:IIS环境下PHP exec()无法调用PDFCreator-cli.exe完成docx转pdf
背景与已排除方案
- 耗时三天排查,PHP通过
exec()调用.exe文件将docx转为pdf始终失败 - 曾尝试libreoffice及其他转换库,均存在严重格式丢失问题,已排除
- 服务器上PDFCreator命令行工具转换后的PDF格式完美,服务器已安装MS Word和PDFCreator
已配置的环境与权限
- IIS站点应用程序池为"evp",进程模型标识设为"evpuser",已启用加载用户配置文件
- evpuser、IIS_IUSRS、IUSR对以下路径拥有完全控制权限:
pdfcreator-cli.exe- Program Files目录下的PDFCreator文件夹
- PDF输出文件夹
- IIS站点启用匿名身份验证,指定身份为evpuser
- 执行
exec(whoami)返回SRV\evpuser,已将evpuser加入管理员组
关键现象
- 以evpuser身份在cmd中执行以下命令,可正常生成PDF:
"C:\\Program Files\\PDFCreator\\PDFCreator-cli.exe" PrintFile /File="C:\\inetpub\\evp\\storage\\app\\temp\\2024-03-04--22-39-37-802_1.3.docx" - 但PHP中执行相同命令无任何反应,代码如下:
$command = '"C:\\Program Files\\PDFCreator\\PDFCreator-cli.exe" PrintFile /File="C:\\inetpub\\evp\\storage\\app\\temp\\2024-03-04--22-39-37-802_1.3.docx"'; $out = array(); exec($command, $out,$exitcode); echo "<br />EXEC: ( exitcode : $exitcode )"; dd($out); - 将上述命令写入批处理文件,直接在服务器运行可生成PDF,但通过PHP
exec()调用批处理仍无反应
求助
已尝试网上所有相关方案,因公司规定不愿卸载IIS更换Apache,求可行的调试方法,找出exec()命令无法执行完成的原因。
内容的提问来源于stack exchange,提问作者freelancer000
相关产品推荐
相关产品推荐

