Kann nicht ausführen Python-Skript aus PHP-Dokument
Mir läuft ein PHP-Dokument auf einem Apache-server auf meinem Raspberry Pi und ich will es auf eine Datei führen, wenn auf eine Schaltfläche geklickt wird. Ich habe einige echo-Befehle unter-Befehl, um die Datei ausführen und es druckt, aber die Datei läuft nicht. Die index.php Datei-und lightson.py und lightsoff.py Dateien sind alle im selben Verzeichnis (/var/www), und ich habe Hinzugefügt #!/usr/bin/env python auf der Spitze der beiden Dateien gemacht und diese ausführbare Datei durch die Verwendung von chmod +x lightson.py. Wenn ich den Befehl von der shell aus, es funktioniert und macht das Licht an, nur möchte ich mit der exakt gleichen Befehl wie in der Datei, aber noch ist es nicht ausgeführt, durch den Befehl. Der code:
<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>
InformationsquelleAutor Bruh | 2015-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
als Sie sagte, Sie es läuft wie
apache->php->shell_exec(SUDO..)
Also der apache-Benutzer muss in der sudoers-Datei, die Sie besser nicht geben sudo zu apache, stattdessen gibt apache (www-data), die Benutzer Rechte zum ausführen von python-Programm
setzen erste Zeile in Ihrer python-Skript:
#!/usr/bin/env python
damit das Skript weiß, welches Programm zum öffnen mit..dann
Gruppe ändern:
machen es executabel
versuchen Sie es
Ich hoffe, es funktioniert 😉
TIPP: Apache und PHP sind für die Bereitstellung
Documents and Strings
, wenn Sie wollen, irgendeine Art von Kontrolle, und eine API beginnen mit nodejs und https://www.npmjs.com/package/rpi-gpio Paket. Auf diese Weise haben Sie einen Ort für Ihre Feste Automatisierung UmweltIch habe alle, aber es immer noch nicht wollen, es zu tun. @webdeb
Mit dem Befehl ls-l, es gibt mir die folgende permisions für jede Datei: -rw-r--r-- 1 root root 391 Sep 16 02:46 index.php, -rwxr-xr-x 1 root www-data 654 Sep 16 01:11 lightson.py, -rwxr-xr-x 1 root www-data 653 Sep 16 01:10 lightsoff.py @webdeb
chgrp www-data /path/to/python-script.py
www-data
haben keine Ahnung, schreibenhardware pins
. Schreiben Sie einen lokalen Dienst (oder einzige Zeile python-shell-Befehl(nur startwithsudo
)) , und senden von shell oder service. man spielt nicht mit der Datei-Berechtigung...www-data sollten in der Lage sein zum ausführen von python-Skripts können Sie hinzufügen www-data in sodoers nur für python-Skripte:
www-data ALL=(root) NOPASSWD: /usr/bin/python
und tun Sie es mit sudoInformationsquelleAutor webdeb
Dieser arbeitete für mich:
test.php
test.py
Hier meine relevanten
ls -l
Ausgabe von/var/www/html
:Da habe ich nicht das GPIO-pins auf meinem laptop, entschied ich mich zu schreiben, um eine Datei als test. Beachten ich nicht verwenden Sie
sudo
wegen der Art, wie ich die Berechtigungen auftest.py
.root
sollte in Ordnung sein, solange die python-Datei die Berechtigungen hat, die dreix
's in es. Haben Sie versucht, meinen code und in die Datei schreiben, oder haben Sie versucht, zu manipulieren, um die GPIO-pins mit diesem code als Leitfaden?Ich habe versucht, zu manipulieren, um die GPIO-pins mit meinem code... soll ich den code, den Sie oben und legte meinen code im .txt-Datei ?
Nein, die text-Datei war nur für den test ausgeben, um sicherzustellen, dass meine php-Datei war, dass mein python-Skript ausführen. Wenn Sie testen, meine code-und Datei-Berechtigungen, die ich oben bereitgestellt wird, konnten wir überprüfen, dass php ausgeführt wurde, Ihre python-Skript. Wenn Sie das python-Skript ausgeführt wird, dann ist das problem wahrscheinlich ein Berechtigungsproblem mit den GPIO-pins. Set up diese drei Dateien und führen Sie dann das php-Skript. (
text.txt
muss nicht alles in ihm, wenn Sie es schaffen, aber Sie brauchen, um es zu erstellen, um Berechtigungen einrichten.)Kopiert habe ich die exakt gleiche script und nach dem öffnen der Seite .txt-Datei noch leer ist @Jason
InformationsquelleAutor Jason