.sh Script per PhP starten
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
button
code
datei
export
fehler
fehlermeldung
header
http
jeweiligen ports
lampe
neustart
port
sache
schritt
shell
sicherheit
umsetzen
url
versuchen
verzeichnis
-
Hallo, da bin ich schon wieder mit einer Frage :D
Ich bastel hier gerade für meine 5.PK mit einem Raspberry Pi3 etwas rum. Dabei benutze ich die GPIO Ports des Gerätes um verschidene Aktionen durchzuführen. Derzeit aktiviere u deaktiviere ich die jeweiligen Ports noch per ./gpio*ein.sh // ./gpio*aus.sh
Da hatte ich jetzt sie super Idee dieses Script einfach mit PhP per Button auf einer Website zu starten. Die Ausgabe des Scripts benötige ich nicht, es muss nur ausgeführt werden. Theoretisch kann man dass sicher auch alles in PhP umsetzen, das ist mir aber noch etwas zu hoch :)
Hier ist eines der sh Scripte
* steht hierbei immer für den GPIO Port
./gpio*ein.sh
#!/bin/sh echo "*" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio*/direction echo "1" > /sys/class/gpio/gpio*/value chmod 666 /sys/class/gpio/gpio*/value chmod 666 /sys/class/gpio/gpio*/direction
Bei dem PhP Code hätte ich mir in etwa so etwas vorgestellt:
//Ausführen Script 1 (./gpio*ein.sh) sleep (0.5) //Ausführen Script 2 (./gpio*aus.sh)
Ich hoffe ihr könnt da helfen :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Vielen Dank erst einmal für die Hilfe :)
Ich versuche das nun doch mit file_put_contents . Allerdings funktioniert es noch nicht.
So sieht der Code aus.
<? file_puts_contents("/sys/class/gpio/export", 6); file_puts_contents("/sys/class/gpio/gpio6/direction", "out"); file_puts_contents("/sys/class/gpio/gpio6/value", 1); sleep(1); file_puts_contents("/sys/class/gpio/gpio6/value", 0); ?>
Die Rechte im Verzeichnis habe ich mit
chown www-data /sys/class/gpio/*
hoffentlich richtig gesetzt. -
horstexplorer schrieb:
Nun ja, das ist naheliegend. Du kannst das aber auch überprüfen.
Die Rechte im Verzeichnis habe ich mit
chown www-data /sys/class/gpio/*
hoffentlich richtig gesetzt.
Zuerst einmal würde ich gerne sehen, welche Rechte jetzt tatsächlich gesetzt sind. Das kannst du mit
abfragen.ls -l /sys/class/gpio
Dann kannst du einmal versuchen, die funktionierenden Shellskripte mit www-data Rechten auszuführen.
Wechsle dazu einfach mit
in den Rechtekontext des Webservers und teste dann die Shellskripte.sudo su www-data
In PHP empfiehlt es sich, die Fehlermeldungen explizit einzuschalten. Füge also oben im Skript folgende Zeilen ein:
error_reporting(E_ALL); ini_set("display_errors", 1);
Danach gibt dir PHP unter Umständen auch Fehler aus.
Mit diesen Schritten kannst du dann den Fehler genauer eingrenzen. -
Ok, die Rechteverteilung sieht so aus:
root@CloudHome:/var/www/html# ls -l /sys/class/gpio insgesamt 0 -rwxrwx--- 1 www-data gpio 4096 Jul 11 13:00 export lrwxrwxrwx 1 www-data gpio 0 Jul 11 12:31 gpio6 -> ../../devices/platform/soc/3f200000.gpio/gpiochip0/gpio/gpio6 lrwxrwxrwx 1 www-data gpio 0 Jul 10 19:19 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0 lrwxrwxrwx 1 www-data gpio 0 Jul 10 19:19 gpiochip100 -> ../../devices/gpiochip2/gpio/gpiochip100 lrwxrwxrwx 1 www-data gpio 0 Jul 10 19:19 gpiochip128 -> ../../devices/gpiochip1/gpio/gpiochip128 -rwxrwx--- 1 www-data gpio 4096 Jul 10 19:19 unexport
Nach einem Neustart liegt das ganze allerdings wieder auf root.
Das Einloggen mit www-data funktioniert nicht so ganz, mit
geht es aber :)su -s /bin/bash www-data
Die Änderungen habe ich eingebaut, allerdings erscheinen keine Fehlermeldungen.
-
Eigentlich sollte es reichen den User "www-data" zur Gruppe "gpio" hinzuzufügen.
Das sollte auch den Neustart überdauern.
Hast du denn mal versucht die Dateien direkt im Kontext von www-data auszuführen? Also direkt am Webserver vorbei? -
Mittlerweile habe ich das ganze mit shell_exec(sudo ....) gelöst. Sonderlich auf die Sicherheit kommt es hier nicht an, da das ganze nur lokal mit dem Internet verbunden ist.
Allerdings habe ich mit der Ausführung des PhP Codes noch ein Paar Sachen die mir nicht gefallen.
Ich bin auf der Seite lampen.php und dort liegt ein Button der zu der php Datei führt.
<form method="post" action="./GPIO_C/gpio12.php"> <input type="submit" name="Aus"> </form>
und dann liegt unter ./GPIO_C/gpio12.php
<?php shell_exec('sudo /var/www/html/GPIO/gpio12ein.sh'); sleep(1); shell_exec('sudo /var/www/html/GPIO/gpio12aus.sh'); header('../lampen.php'); ?>
Allerdings werde ich beim ausführen des Codes auf die Seite gpio12.php geleitet und von dort nicht wieder zurück. Eigentlich würde ich das so lösen, dass ich nicht auf die Seite weitergeleitet werde, sondern nur der code ausgeführt wird.
Beitrag zuletzt geändert: 11.7.2017 15:44:56 von horstexplorer -
Dankeschön, nun geht erstmal alles ;)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage