这个问题已经被问过很多次了,也提出了很好的建议,但提问者的突然放弃并没有起到什么帮助作用,因为他们从来没有回过头来告诉我们什么方法有效(假设它最终一定会有效)
我正在尝试从 PHP 运行 Python 脚本,但未能成功。环境:PHP 7.3、Python 3.8、CentOS 7、Apache 2.4、Bluehost VPS。
尝试了
exec
两者shell_exec
apachectl -S
显示 apache 服务器以 nobody:nobody 身份运行添加没有人在 sudoer 中使用
nobody ALL=(ALL) NOPASSWD: /etc/bin/python3
ls -l testing.py
为 Python 脚本添加了执行权限,并将所有者更改为 nobody(与 apache 相同)-rwxr-xr-x 1 nobody nobody
Python 脚本本身可以在 shell 中顺利运行。
这是我的代码:
<?php
error_reporting(E_ALL);
$command = 'python3 /home/uploads/testing.py';
$command = escapeshellcmd($command);
$shelloutput = exec($command,$output, $ret_code);
echo "<h1>";
echo $shelloutput;
echo $output;
echo $ret_code;
echo "</h1>";
?>
Python脚本:
#!/usr/bin/env python3
import sys
print("Hello")
sys.exit(8)
当我从浏览器运行 PHP 文件时,什么也没得到。如果能帮助解决这个问题,我将不胜感激。
答案1
发现问题出在 php.ini 文件中,删除disable_functions=""
指令后 Python 脚本就可以正常工作。正如 Gerald 在评论中提到的,我不需要向sudoers文件或更改文件权限/用户(标准权限属性除外)+x
(或 0755)