无法从PHP运行Python脚本并将输出打印到浏览器
我见过很多其他人遇到类似的问题,他们无法从PHP运行Python脚本。我也遇到了同样的情况,但我尝试了人们推荐的所有解决方案,但仍然没有成功。我也有一个新的系统安装,并使我的脚本尽可能简单。不管我做什么,shell_exec()都返回NULL 下面是如何复制我的问题:无法从PHP运行Python脚本并将输出打印到浏览器,php,python,amazon-web-services,Php,Python,Amazon Web Services,我见过很多其他人遇到类似的问题,他们无法从PHP运行Python脚本。我也遇到了同样的情况,但我尝试了人们推荐的所有解决方案,但仍然没有成功。我也有一个新的系统安装,并使我的脚本尽可能简单。不管我做什么,shell_exec()都返回NULL 下面是如何复制我的问题: 在Amazon AWS上启动t2.micro EC2服务器 将其配置为web服务器() 使用以下代码将index.php文件上载到/var/www/html: 转到AWS公共URL。您将得到的响应为“NULL” 为了解决这个问题
为了解决这个问题,我还将.py文件的用户组改为“apache”,并在.py文件上运行chmod+x。我确认ec2用户和apache在sudo组中。还是不走运!那我还没试过什么?我遗漏了什么或者我可以去哪里查找错误日志?使用file常量
\uuu file\uuu
来确定pyhton脚本的路径,如果您将dirname
函数应用到它,那么它只会起作用,否则您会得到类似/var/www/html/script.php/script.py
,但实际上您只需要/var/www/html/script.py
有两个简单的解决方案。使用dirname
或直接使用\uuuu DIR\uuu
常量
$command = escapeshellcmd('sudo /usr/bin/python ' . __DIR__ . '/script.py');
或
你有sudoers中的web用户设置吗?刚刚测试过,ec2用户是sudoer,当你使用sudo命令时不需要密码。为了以防万一,我还将apache添加到sudoers列表中。不管怎样,你是对的,Devon!在将apache添加到sudo组之后,我还需要重新启动服务器,然后它就可以工作了。谢谢你的帮助!是的,让阿帕奇做sudoer时要非常小心。任何利用web服务器或任何web脚本进行攻击的人都可以在您的服务器上执行任何操作。尝试过,仍然没有成功:/但是您完全正确地认为该文件无法工作,因此感谢您!顺便说一句,你的Python脚本真的需要根权限吗?Sudo通常需要Sudo用户的密码作为输入,我真的不确定。我在没有sudo权限的情况下运行python脚本时运气不佳,然后,一旦我将apache用户添加到sudo组,它就开始工作了代码>并修复文件/文件夹权限。给apacheroot权限是一个非常糟糕的主意,这样我就不能让python脚本以sudo用户的身份运行。然而,事实证明,我的完整脚本需要python3才能运行。出于某种原因,python3不需要sudo来运行(可能是因为我将python3安装为我的用户?所以我能够从sudo用户组中删除apache并使用python3运行脚本)。
#!/usr/bin/python
print('Hello!')
$command = escapeshellcmd('sudo /usr/bin/python ' . __DIR__ . '/script.py');
$command = escapeshellcmd('sudo /usr/bin/python ' . dirname(__FILE__) . '/script.py');