Forum: PC-Programmierung Per Raspberry-Webserver C-Datei aufrufen


von Radler (Gast)


Lesenswert?

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

von T.roll (Gast)


Lesenswert?

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.

von Radler (Gast)


Lesenswert?

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 :)

von WebDeveloper (Gast)


Lesenswert?

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.

von Radler (Gast)


Lesenswert?

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!!!

von WebDeveloper (Gast)


Lesenswert?

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".

von auron2008 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.