Laragon PHP NTS版本调用unoconv失败问题咨询
问题背景
- 旧项目依赖unoconv实现docx转PDF,在PHP线程安全(TS)版本下运行正常
- 切换至PHP 7.4.32非线程安全(NTS)版本后,已复制原php.ini配置,phpinfo显示PATH与原版本一致,unoconv及Office安装均在PATH中
- 执行转换命令:
C:\Users\USER\AppData\Local\Programs\Python\Python311\python.exe C:/unoconv/unoconv.py C:/laragon/www/vak/storage/documents/doc.148.docx 2>&1 - 触发报错:
unoconv: Cannot find a suitable office installation on your system.
ERROR: Please locate your office installation and send your feedback to:
http://github.com/dagwieers/unoconv/issues
解决步骤
1. 直接指定Office安装路径
在unoconv命令中通过--office-path参数明确指定Office可执行文件所在目录,例如Office 365的64位路径:
C:\Users\USER\AppData\Local\Programs\Python\Python311\python.exe C:/unoconv/unoconv.py --office-path "C:\Program Files\Microsoft Office\root\Office16" C:/laragon/www/vak/storage/documents/doc.148.docx 2>&1
若为32位Office,替换路径为C:\Program Files (x86)\Microsoft Office\root\Office16。
2. 确认PHP子进程的实际PATH
phpinfo显示的PATH可能与PHP执行子进程时的环境PATH存在差异(NTS与TS的进程环境逻辑不同)。在PHP中执行以下代码,查看实际生效的PATH:
echo shell_exec('echo %PATH%');
如果输出的PATH未包含Office的WINWORD.EXE所在目录,临时在PHP代码中添加路径:
putenv('PATH=' . getenv('PATH') . ';C:\Program Files\Microsoft Office\root\Office16'); // 随后执行unoconv转换命令
3. 修复unoconv的Office检测逻辑
部分旧版unoconv对Office 365的路径识别存在问题,可手动修改unoconv.py:
- 打开
unoconv.py,搜索find_office相关函数 - 在Office路径检测列表中添加你的Office安装目录,保存后重新测试
4. 以管理员身份运行Laragon
NTS版本的PHP在子进程权限上可能与TS版本不同,右键以管理员身份启动Laragon,再执行转换命令,避免权限不足导致无法读取Office安装信息。
5. 检查Python版本兼容性
unoconv对Python版本有兼容要求,你当前使用的Python 3.11可能与旧版unoconv不兼容。可切换至Python 3.8或3.9版本测试,或升级unoconv到最新版本。
内容的提问来源于stack exchange,提问作者Dylan Bos

