无法从PHP运行Python脚本并将输出打印到浏览器

无法从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” 为了解决这个问题

我见过很多其他人遇到类似的问题,他们无法从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');