You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从PHP调用PDF压缩Python脚本异常:终端正常网页无效果

排查PHP调用Python PDF压缩脚本失败的问题

以下是针对你的问题的排查和解决步骤:

1. 修正文件路径问题

脚本中in.pdf和out.pdf使用相对路径时,PHP运行的工作目录(通常是网站根目录,如public_html)和你终端运行时的目录可能不一致,导致文件找不到。

  • 改成绝对路径:
    # 替换成你的实际用户目录路径
    compressor = PdfCompressor("/home/your_username/public_html/in.pdf")
    compressor.CompressToFile("/home/your_username/public_html/out.pdf")
    
  • 同时确认PHP中convert.py的路径正确,可利用__DIR__获取当前PHP文件所在目录:
    $pythonScriptPath = __DIR__ . '/convert.py';
    

2. 统一Python环境依赖

终端使用的Python环境和Web服务器调用的Python环境可能不同,导致Web环境缺少spire.pdf库:

  • 先在PHP中查看Web使用的Python路径:
    echo shell_exec("which python3");
    
  • 对比终端执行which python3的结果,如果路径不同,需要在Web的Python环境中安装依赖:
    # 替换成Web的Python路径
    /path/to/web/python3 -m pip install spire.pdf
    
  • 或者修改Python脚本第一行的解释器路径为终端的Python路径:
    #!/home/your_username/.local/bin/python3
    

3. 调整文件权限

确保Web服务器用户(如nobody、apache)对相关文件有对应权限:

  • in.pdf需要读取权限,设置为644:chmod 644 in.pdf
  • out.pdf所在目录需要写入权限,设置为755:chmod 755 /path/to/output/dir
  • 避免将文件放在Web根目录外的私有目录,Web用户通常无法访问。

4. 捕获错误输出

默认shell_exec只捕获标准输出,看不到错误信息,修改命令将错误重定向:

$command = escapeshellcmd("python3 $pythonScriptPath 2>&1");
$output = shell_exec($command);
echo "<pre>$output</pre>";

运行后输出的错误信息会直接告诉你问题根源(如库缺失、路径错误、权限不足等)。

5. 检查Spire.PDF许可

如果使用商业版Spire.PDF,需确保脚本中正确设置了许可密钥,且Web环境能读取到许可配置。未授权版本可能在Web环境下限制功能。

内容的提问来源于stack exchange,提问作者Tough Geeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:07:24