我在我的 Raspberry Pi 上的 Apache 服务器上运行一个 PHP 文档,我希望它在单击按钮时运行一个文件。我在命令下放置了一些 echo 命令以使文件运行并打印出来但文件没有运行。 index.php 文件和 lightson.py 和 lightsoff.py 文件都在同一目录 (/var/www) 中,我添加了 #!/usr/bin/env python 到两个文件的顶部,并使用 chmod +x lightson.py 使它们可执行。如果我从 shell 运行命令,它会工作并打开灯,就像我想要的一样,使用与文件中完全相同的命令,但它不会运行整个命令。代码:
<html>
<head>
<title>Light Controller</title>
</head>
<?php
if (isset($_POST['LightON']))
{
shell_exec("sudo python /var/www/lightson.py");
echo("on");
}
if (isset($_POST['LightOFF']))
{
shell_exec("sudo python /var/www/lightsoff.py");
echo("Off");
}
?>
<form method="post">
<button name="LightON">Light ON</button>
<button name="LightOFF">Light OFF</button><br><br>
</form>
</html>
最佳答案
正如您所说,您正在像 apache->php->shell_exec(SUDO..)
一样运行它
所以 apache 用户必须在 sudoers 文件中,最好不要给 apache sudo 而是给 apache (www-data) 用户运行你的 python 程序的权限
在你的 python 脚本中放置第一行:#!/usr/bin/env python
这样脚本就知道用哪个程序打开它..
然后
更改组:
chgrp www-data /path/to/python-script.py
让它执行
chmod +x /path/to/python-script.py
尝试一下
shell_exec("/path/to/python-script.py");
我希望它有效;)
TIPP:Apache 和 PHP 用于交付文档和字符串
,如果您想要某种控制和 API,请从 nodejs 和 https://www.npmjs.com/package/rpi-gpio 开始包裹。这样,您就可以在一个地方放置可靠的自动化环境
关于php - 无法从 PHP 文档执行 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598420/