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

从PHP调用Python脚本执行失败求助

排查PHP执行Python脚本失败的问题

我来帮你一步步排查这个问题,这种PHP调用Python脚本没反应的情况,大多是路径、权限或者环境依赖的问题,咱们逐个来解决:

1. 给Python解释器指定完整路径

很多时候系统里会有多个Python版本,exec("python pdf.py")里的python可能不是你安装了pdfkit的那个环境,或者PHP的执行环境找不到它。

你可以先在终端里运行which python或者which python3,拿到Python的完整路径(比如/usr/bin/python3),然后修改PHP代码:

exec("/usr/bin/python3 pdf.py");

同时记得确认这个Python环境里确实安装了pdfkit,终端运行/usr/bin/python3 -m pip list,看看列表里有没有pdfkit。

2. 确认文件的绝对路径

PHP执行exec时的工作目录不一定是你的脚本所在目录,比如如果data.php在/var/www/html/app,而pdf.py在/var/www/html,直接写pdf.py就会找不到文件。

改成绝对路径调用更稳妥:

exec("/usr/bin/python3 /var/www/html/pdf.py");

另外,生成的google.pdf也要注意,PHP运行的用户(比如www-data)需要有写入这个文件所在目录的权限。

3. 捕获执行的错误信息

现在你的代码完全看不到执行时的错误,根本不知道是哪里出问题了。修改PHP代码,把输出和错误都捕获下来:

ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_DEPRECATED);
$output = [];
$returnVar = 0;
// 2>&1 是把错误输出重定向到标准输出,这样就能拿到所有信息
exec("/usr/bin/python3 /path/to/pdf.py 2>&1", $output, $returnVar);
print_r($output); // 打印执行输出和错误
echo "返回码:" . $returnVar; // 返回码非0就是执行出错了

运行这段代码后,你就能看到具体的错误提示,比如pdfkit找不到依赖的wkhtmltopdf,或者权限不够,这些都会直接显示出来。

4. 检查pdfkit的依赖是否安装

pdfkit本身只是个封装,它依赖wkhtmltopdf这个工具,必须先在系统里安装好:

  • 如果你用Ubuntu/Debian,终端运行:sudo apt-get install wkhtmltopdf
  • 如果你用CentOS/RHEL,终端运行:sudo yum install wkhtmltopdf

如果安装后还是报错,可以在Python脚本里指定wkhtmltopdf的路径:

import pdfkit
config = pdfkit.configuration(wkhtmltopdf='/usr/bin/wkhtmltopdf')
pdfkit.from_url('https://www.google.co.in/','google.pdf', configuration=config);

5. 检查权限问题

最后别忘了权限,PHP运行的用户(通常是www-data)需要:

  • 能读取pdf.py文件的权限
  • 能写入google.pdf所在目录的权限
  • 能执行Python解释器和wkhtmltopdf的权限
  • 如果脚本需要访问网络(比如爬取Google的页面),还要确保这个用户能正常联网,没有被防火墙限制

内容的提问来源于stack exchange,提问作者Ambika Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:42:36