从 Php 执行 Python 脚本

Execute Python script from Php

我的 raspberry pi 上有一个 PHP 网页,有 2 个按钮(打开和关闭) 打开按钮按钮重定向到 On.php 关闭按钮重定向到 Off.php 在“/usr/lib/cgi-bin”中,我有一个要执行的 python 脚本 (script.py) 我可以通过键入

从终端完美地执行它
cd /usr/lib/cgi-bin
sudo python script.py

如果我从终端执行它,它会起作用。

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

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

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

您不能在 PHP 脚本中使用 sudo。 Apache 运行 来自一个用户(通常是 www-data),所以编辑这个文件:/etc/sudoers

然后添加这一行:

www-data ALL=(ALL) NOPASSWD:ALL

关心!这将授权所有函数由 PHP 脚本调用,您可以通过脚本或 Python 命令适应更改 "ALL"。

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

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

试试这个,它应该可以工作:

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

甚至这样:

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

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

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

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

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

或任意 file.py

<?php
{
  exec("sudo python test.py");
}

?>

注意:为此,您需要先编辑文件以添加这些行以允许无密码 sudo

sudo nano /etc/sudoers

然后到底部添加这个

pi ALL=(ALL) NOPASSWD: ALL<br>
www-data ALL=(ALL) NOPASSWD: ALL