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

通过PHP调用复杂Python脚本无结果,终端运行正常求助

问题描述

我在同一Web主机的同一目录下,通过PHP脚本调用Python脚本。第一个简单示例运行完全正常:

PHP代码:

<?php
shell_exec("python main.py");
echo"success";
?>

Python简单脚本:

import os

os.popen('cp uploads/1.jpg sessions/1.jpg')

但换用以下更复杂的Python脚本后,却没有任何结果。该脚本在终端执行时完全正常:

import cv2
import datetime
import pytz

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.datetime.now(tz_London)
name = datetime.date.today().strftime("%y-%m-%d-") + (datetime_London.strftime("%p"))
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')

width = 295
height = 360
dim = (width, height)

filename = "sessions/%s_1.jpg" % name
img = cv2.imread('uploads/1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x +100 + w -100, y +100 + h -50), (0, 0, 255), 2)
    faces = img[y:y +50 + h, x:x + w]
    faces = cv2.resize(faces, dim)
    cv2.imwrite(filename, faces)

print(name)
解决方案

1. 指定Python环境绝对路径

Web服务器(如Apache/Nginx)运行PHP的系统用户,和你终端登录的用户环境不同,默认python指向的环境可能未安装cv2、pytz等依赖。

  • 终端执行which python3获取完整路径(如/usr/bin/python3)
  • 修改PHP代码:
shell_exec("/usr/bin/python3 main.py");

2. 捕获错误输出排查问题

shell_exec默认只返回标准输出,错误信息会被丢弃,修改代码将错误输出重定向:

<?php
$output = shell_exec("python3 main.py 2>&1");
echo "执行输出: " . $output;
echo "success";
?>

通过输出可以直接看到脚本执行时的报错(如依赖缺失、文件找不到等)。

3. 检查文件/目录权限

Web服务器用户(如www-data)可能没有对应权限:

  • 确保sessions目录有写入权限:chmod 755 sessions
  • 确保uploads/1.jpg、haarcascade_frontalface_alt2.xml有读取权限:chmod 644 uploads/1.jpg haarcascade_frontalface_alt2.xml
  • 建议给haarcascade_frontalface_alt2.xml指定绝对路径,避免相对路径找不到。

4. 安装缺失的依赖

终端环境安装了依赖,但Web用户的Python环境可能没有:

  • 以Web用户身份安装:sudo -u www-data pip3 install opencv-python pytz
  • 或用绝对路径的pip安装:/usr/bin/pip3 install opencv-python pytz

5. 检查服务器资源限制

OpenCV人脸检测脚本可能需要更多内存,Web服务器的进程资源限制可能导致脚本被终止。可以查看服务器错误日志(如Apache的error.log)确认是否有相关报错。

内容的提问来源于stack exchange,提问作者Piet Bez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:55:53