使用Unoconv转换docx为pdf时出现HTTP ERROR 500问题求助
问题排查与解决方法
第一步:先获取具体报错信息
在业务脚本最顶部添加以下代码开启PHP错误显示,拿到明确的错误原因,避免盲猜:
error_reporting(E_ALL); ini_set('display_errors', 1);
常见触发500的原因及对应解决办法
Unoconv.php文件加载失败
你当前用require './Unoconv.php'的相对路径加载文件,相对路径是基于PHP脚本的执行工作目录计算,两个站点的运行工作目录不同就会导致当前站点找不到文件,执行use语句时找不到对应命名空间直接报错。
解决:改用绝对路径加载文件:require __DIR__ . '/Unoconv.php';__DIR__是当前业务脚本所在的目录,路径不受执行工作目录影响,稳定性更高。文件权限不足
两个站点的PHP运行用户(常见为www-data、apache、nginx)可能不同,当前站点的运行用户没有Unoconv.php的读取权限,就会加载失败触发500。
解决:给Unoconv.php设置644权限,确保所属用户/用户组和当前站点的PHP运行用户匹配。PHP版本不兼容
命名空间语法是PHP 5.3版本之后才支持的,如果当前站点的PHP版本低于5.3,执行use语句会直接报语法错误触发500。
解决:对比正常运行的站点PHP版本,将当前站点PHP版本升级到5.3及以上即可。命令调用/目录权限问题(加载无问题后排查)
若上述问题都解决后仍报错,排查以下两点:- unoconv命令路径问题:站点运行用户的PATH环境变量可能没有包含unoconv的安装路径,直接写
unoconv系统会找不到命令。可在服务器执行which unoconv拿到命令绝对路径,替换Unoconv类中的命令前缀,例如:
$command = '/usr/bin/unoconv --format %s --output %s %s';- 读写目录权限问题:确保源docx文件所在目录、PDF输出目录都给PHP运行用户开放读写权限,同时输出目录要提前创建,不存在的话可在代码中用
mkdir()递归创建。
- unoconv命令路径问题:站点运行用户的PATH环境变量可能没有包含unoconv的安装路径,直接写
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

