Hallo Leute, ich habe da ein Problem mit der Steuerung meines Raspis über einen Webserver. Was ich dank eines Videos hinbekommen habe: -Ich kann die GPIOs per Webserver ein und ausschalten: 1)Dazu habe ich eine Shell-Datei erstellt, die Befehle für die GPIO-Ansteuerung dort reingeschrieben und danch die Datei ausführbar gemacht. 2)Dann habe ich eine PHP Datei auf dem Webserver erstellt, mitder ich die Shelldatei (an.sh) über folgenden Befehl aufrufe: <?php shell_exec ('/home/pi/LED/an.sh'); header ("Location:index.html"); ?> 3)Die PHP datei habe ich in eine index.html eingebunden damit ich sie bequem per Intranetseite aufrufen kann. Das funktioniert auch alles Wunderbar. Nun zu meine Frage: Wie kann ich anstatt einer Shell-Datei eine kompilierte C-Datei in die PHP Datei einbinden und aufrufen? Ich habe ein kurzes C-programm geschrieben, mitdem ich eine LED am GPIO an und wieder ausgehen lassen kann. (led an, delay, led aus) Nach dem kompilieren kann ich die Datei ausführen und sie tut auch das was sie soll. Aber wie bekomme ich das hin, dass die Datei beim Aufruf der PHP Datei ausgeführt wird. Sry für den langen Text. Gruß und Danke, Johannes
Radler schrieb: > Wie kann ich anstatt einer Shell-Datei eine kompilierte C-Datei in die > PHP Datei einbinden und aufrufen? Genauso wie die Shell-Datei. shell_exec() ist nicht auf Shellskripte beschränkt, sondern bedeutet nur, dass der Befehl in einer Shell ausgeführt wird.
welche dateiendung muss die Kompilierte C-Datei haben, damit sie durch eine PHP-Datei aufgerufen werden kann? Ich habe die main.c zu einer main kompiliert, also ohne Endung. Sie ist aber trotzdem ausführbar. Leider nur nicht durch einen aufruf über eine PHP Datei. Ich hoffe jetzt sitzen nicht zu viele Kopfschüttelnd vor dem pc :)
Womöglich hat der Webserver aufgrund der Rechtevergabe keinen Zugriff auf die Datei? Früfe mal, wem die Datei gehört und wie die rechte gesetzt sind. Vergleiche dann mal mit deinen Shell-Skripten.
es liegt wohl an den rechten. ich bekomme aber nur nicht geändert. sie shelldatei habe ich mit "chmod +x" freigegeben aber bei der anderen datei klappt das nicht. werde mich morgen noch mal dransetzten. Vielen dank schonmal für die Hilfe!!!
Es ist auch wichtig, wem die Datei gehört (Stichwort chown). Ich weiß nicht, welcher User und welche Gruppe beim RPi der Webserver ist, aber auch das muss stimmen. Bei Debian war's meines Wissens nach immer "www-data:www-data".
Als alternative würde ich dir eine Kommunikation mittels einem UnixSocket empfehlen. Ist einfach implementiert und du bist flexibler. Falls du dennoch bei deiner Variante beiben möchtest, dann versuche mal folgendes. Installiere sudo, öffne die Datei /etc/sudoers. In dieser Datei kannst du Dateien festlegen welche du ohne sudo password aufrufen möchtest. z.B.
1 | www-data ALL=(ALL) NOPASSWD: /home/cprogramm |
Aus deinem PHP Script kannst du diese Datei folgendermaßen aufrufen:
1 | exec("sudo -u root /home/cprogramm"); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.