从 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
我的 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