Seite 1 von 1
Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 09:18
von seum90
Hallo Ich habe ein Problem.
Vorab:
Raspberry 3B aktuelles Rasbian alles andere auch aktuell.
Auf den PI ist Apache und PHP sowie Python installiert.
Ich habe 2 kleine Programme geschrieben. GPIO_an.py und GPIO_aus.py ganz minimalistisch. Dann gibt es noch eine Index.php die je nach bedingung eines der beiden Programme aufruft.
Wenn ich die beiden Programme über die CMD Aufrufe machen beide was sie sollen. Führe ich die Programme über ein shell_exec in PHP aus funktionieren diese nicht.
Hier mal der PHP Code:
Code: Alles auswählen
<?php
$cmd = shell_exec('python3 GPIO_an.py');
echo $cmd;
?>
Hier der Python Code:
Code: Alles auswählen
import RPi-GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(5, GPIO)
GPIO.output(5, GPIO.HIGH)
Alle Dateien befinden sich in /var/www/html/
die py datein habe ich mit sudo chmod 777 gesetzt. sudo chmod -x habe ich auch schon probiert.
im Log steht folgendes:
Traceback (most recent call last):
File "GPIO_an.py", line 7, in <module>
GPIO.setup(5, GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
Als root geht nicht dann kommt eine Fehlermeldung wegen sudo.
Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 09:46
von __deets__
Und wie sieht die Fehlermeldung wegen sudo aus?
Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 09:53
von paddie
der User unter dem der Apache läuft (müßte, wenn ich mich richtig erinner www-data sein) hat scheinbar keine Rechte um auf die GPIO zuzugreifen. also wenn du es mit sudo machen willst einfach mal versuchen www-data in die sudoers hinzufügen. Bitte aber nur, wenn der Raspi NICHT am Internet hängt

Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 10:04
von seum90
__deets__ hat geschrieben: ↑Mittwoch 11. November 2020, 09:46
Und wie sieht die Fehlermeldung wegen sudo aus?
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified
Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 10:14
von seum90
paddie hat geschrieben: ↑Mittwoch 11. November 2020, 09:53
der User unter dem der Apache läuft (müßte, wenn ich mich richtig erinner www-data sein) hat scheinbar keine Rechte um auf die GPIO zuzugreifen. also wenn du es mit sudo machen willst einfach mal versuchen www-data in die sudoers hinzufügen. Bitte aber nur, wenn der Raspi NICHT am Internet hängt
Habe den user www-data zur Gruppe sudo hinzugefügt und apache neu gestartet. Fehlermedung kommt weiterhin mit sudo im LOG
Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 10:25
von paddie
In dem Fall möchte sudo ein Passwort haben, hat aber kein Möglichkeit danach zu fragen.
In deinem Fall brauchst, oder eher willst, du ja keine Passwortabfrage also in sudoers ein nopasswd hinter dem betreffenden user setzen und sudo mit -t aufrufen.
Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 10:28
von Sirius3
@seum90: NEIN, bitte nicht www-data zur Gruppe sudo hinzufügen. Damit reißt Du Dir riesige Sicherheitslücken auf.
Du mußt in /etc/sudoers dieses eine spezielle Programm erlauben, aber ohne Passwort:
Das muß dann natürlich auch ausführbar sein (Shebang-Zeile nicht vergessen). In /var/www/html/ hat ein Programm gar nichts verloren.
Dein Programm an sich läuft aber noch gar nicht. `import RPi-GPIO` ist keine gültige Syntax.
Re: Python Script mit PHP Aufrufen.
Verfasst: Mittwoch 11. November 2020, 17:38
von hyle
Sirius3 hat geschrieben: ↑Mittwoch 11. November 2020, 10:28
Du mußt in /etc/sudoers dieses eine spezielle Programm erlauben, aber ohne Passwort
Auch das würde ich eher lassen, da dieses Pythonskript, das im Root des Webservers liegt, trotzdem
root-Rechte hätte, die nicht nötig sind.
@seum90 Es wurde zwar schon geschrieben, aber das ist wichtig: Schmeiß den User
www-data wieder aus der Gruppe
sudo raus, der hat dort nichts zu suchen!
- Ändere die Rechte vom Python-Skript wieder in 755. (Ich hoffe Du hast nicht auch an anderen Rechten rumgeschraubt!)
- Schieb den User
www-data in die Gruppe
gpio:
- Dann starte den Apache neu:
und versuchs nochmals!
Btw: Sieh Dir statt RPi.GPIO mal
gpiozero an!
Re: Python Script mit PHP Aufrufen.
Verfasst: Donnerstag 12. November 2020, 09:15
von seum90
Hallo,
erst mal sorry das ich mich erst jetzt wieder melde, aber ich musste erst noch andere Sachen erledigen. Zudem musste ich den Raspi neu aufsetzten da ich so viele Schreibrechte in den letzten Tagen geändert hab auch der Suche nach dem Fehler
Noch dazu hatte ich mir /etc/sudoers zerschossen da ich visudo nicht kannte
@hyle: Du hattest recht. Wenn ich den user www-data zu gpio hinzufüge funktioniert es:)
Was bringt gpiozero für Vorteile mit sich gegenüber RPI?
Danke für eure Hilfe
EDIT:
OK die Frage mit den Vorteilen hat sich erledigt. gpiozero macht es am Anfang schon sehr einfach
