从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

