从PHP执行Python脚本

Execute Python script from Php

我在树莓派上有一个PHP网页,带有2个按钮(打开和关闭)
on按钮上的按钮重定向到On.php
关闭按钮重定向到Off.php
在" / usr / lib / cgi-bin"中,我有一个要执行的python脚本(script.py)
我可以通过在终端上输入

来完美地执行它

1
2
cd /usr/lib/cgi-bin
sudo python script.py

如果我从终端进行操作,它将起作用。

问题是我的" / var / www"文件夹中的PHP文件(On.php)。
这是我写的:

1
2
3
4
<?php
exec('cd /usr/lib/cgi-bin');
exec('sudo python script.py');
?>

为什么从终端而不是从我的PHP执行脚本?


您不能在PHP脚本中使用sudo。 Apache正在从用户运行(通常是www-data),因此请编辑此文件:/etc/sudoers

然后添加此行:

1
www-data ALL=(ALL) NOPASSWD:ALL

保养!这将授权所有功能由PHP脚本调用,您可以通过脚本或Python命令更改更改的" ALL"。

然后在您的exec命令中精确定位您的用户:

1
2
<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py')


尝试一下,它应该可以正常工作:

1
2
3
4
<?php
system("cd /usr/lib/cgi-bin");
system("sudo python script.py");
?>

甚至这个:

1
2
3
<?php
system("cd /usr/lib/cgi-bin && sudo python script.py");
?>

在较旧的Raspbian发行版上,您需要将文件放置在/var/www/file.py中。因此,在您的file.php中添加:

1
2
3
{
    exec("sudo python /var/www/file.py");
}

在较新的Raspbian Jessie上,您需要将文件放置在/var/www/html/file.py中,因此在file.php中,您需要添加:

1
2
3
{
    exec("sudo python /var/www/html/file.py");
}

或者只是任何file.py

1
2
3
4
<?php
{
  exec("sudo python test.py");
}

?>

注意:要执行此操作,您需要首先编辑文件以添加以下行以允许无密码sudo

sudo nano /etc/sudoers

然后转到底部并添加此

1
2
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL