ubuntuusers.de

Mit PHP Ubuntu-Konsolenbefehl ausführen

Status: Ungelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

Coxxxi

Anmeldungsdatum:
28. Dezember 2011

Beiträge: Zähle...

Hallo,

ich betreibe eine USB-Relaiskarte an einem Ubuntu-Rechner, auf dem auch ein Webserver läuft und möchte nun die Steuerung, die sonst über die Konsole läuft, über eine Webseite übernehmen.

Allerdings bringen die bekannten Befehle shell_exec(), exec(), system(), passthru()... nicht den gewünschten Erfolg.

Kann mir jemand weiterhelfen?

Gruß coxxxi

P.S. Ich hoffe, ich bin hier im richtigen Forum^^

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Coxxxi schrieb:

Hallo,

ich betreibe eine USB-Relaiskarte an einem Ubuntu-Rechner, auf dem auch ein Webserver läuft und möchte nun die Steuerung, die sonst über die Konsole läuft, über eine Webseite übernehmen.

Allerdings bringen die bekannten Befehle shell_exec(), exec(), system(), passthru()... nicht den gewünschten Erfolg.

Kann mir jemand weiterhelfen?

Woran genau scheitert es denn? Kannst du ein x-belibiges Testskript, das dem User www-data gehört (und das ausführbar ist) per PHP ausführen lassen? Falls ja könnte es ein Rechteproblem sein.

ExcitedSpoon

Avatar von ExcitedSpoon

Anmeldungsdatum:
17. Juli 2010

Beiträge: 226

Wohnort: /home/berlin

Versuch mal folgendes:

1
2
3
4
5
6
7
8
$command = 'ls /usr';
$output = array();
$retval = null;

exec($command, $output, $retval);

var_dump($output);
var_dump($retval);

Was passiert hier?

Wir "sagen" PHP, dass es den Shell-Befehl "ls /usr" ausführen soll. Die Ausgabe von "ls /usr" wird zeilenweise in das Array $output gespeichert. Der Rückgabewert von "ls /usr" wird in $retval gespeichert.

Im var-dump von $output stehen alle Zeilen der Rückgabe von "ls /usr" (in einem Array).

Im var-dump von $retval steht der Errorcode des ausgeführten Befehls (hier "ls /usr"), bei Erfolg in der Regel 0.

Zu beachten ist hier, dass $output und $retval by-reference übergeben werden und deshalb vorher initialisiert werden müssen.

Für system(), passthru() und shell_exec() sollten die Parameter die gleichen sein. Die Arbeitsweise ist allerdings etwas anders. Ich hoffe das hilft.

EDIT: system(), passthru() und shell_exec() nehmen doch nicht die gleichen Parameter, da war ich etwas voreilig. system() und passthru() nehmen als Parameter nur $command und $retval, shell_exec() nur $command.

Grüße

Antworten |