PHP调用exec执行Python脚本被拒的主因是Web服务器进程权限不足,需检查绝对路径、目录x权限、disable_functions限制及SELinux/AppArmor策略。
PHP调用exec()执行Python脚本被拒绝:先看错误来源
不是PHP没权限,而是Web服务器(如Apache或Nginx)启动的PHP进程,以低权限用户(如www-data或nginx)运行,无法直接访问你个人用户目录下的Python文件,或没有执行权。典型错误是:Permission denied或Operation not permitted。
检查Python脚本路径与所有权
Web进程看不到/home/yourname/script.py,除非路径全局可读,且所有中间目录都有x(执行)权限(Linux下目录的x位决定能否cd进入)。
-
ls -ld /home/yourname→ 若显示drw-------,则需改为chmod 755 /home/yourname -
ls -l /var/www/html/script.py→ 推荐把脚本移到Web根目录下(如/var/www/html/tools/),避免家目录权限干扰 - 确保脚本本身可读可执行:
chmod 755 script.py;若用python3 script.py调用,脚本无需+x,但目录仍需x
PHP中调用方式与安全限制
别用exec("python3 ~/script.py")——~在Web进程里不展开,且exec默认被禁用或受open_basedir、disable_functions限制。