UNIX-Fehlermeldung mit EXEC ausgeben
Jones
- php
Hallo Zusammen,
ich habe folgendes Problem:
Ich versuche mit einem normalen EXEC-Befehl ein File, welches auf meinem UNIX-Server liegt, wie folgt auszugeben:
echo exec("more test.html");
Das funktioniert auch wunderbar, solange dieses File existiert.
Wenn das File aber nicht mehr existiert, sollte das Script doch eine Fehlermeldung zurückgeben? Die Ausgabe ist allerdings leer.
Wenn ich genau diesen Befehl direkt in der Shell ausführe erhalte ich folgende Fehlermeldung: "test.html: No such file or directory"
Wieso bekomme ich diese Fehlermeldung nicht von meinem PHP-Script?
Vielen Dank für eure Hilfe,
Grüsse Jones
Hi,
Wieso bekomme ich diese Fehlermeldung nicht von meinem PHP-Script?
To get the output of the executed command, be sure to set and use the output parameter.
MfG ChrisB
To get the output of the executed command, be sure to set and use the output parameter.
Das habe ich natürlich auch schon probiert:
exec("more test.html", $output);
foreach ($output as $val){
echo $val."<br>";
}
Genau das selbe Problem!
Hallo
Ich versuche mit einem normalen EXEC-Befehl ein File, welches auf meinem UNIX-Server liegt, wie folgt auszugeben:
echo exec("more test.html");
Das funktioniert auch wunderbar, solange dieses File existiert.
Wenn das File aber nicht mehr existiert, sollte das Script doch eine Fehlermeldung zurückgeben? Die Ausgabe ist allerdings leer.
warum testest Du nicht vorher auf Existenz der Datei?
Wenn ich genau diesen Befehl direkt in der Shell ausführe erhalte ich folgende Fehlermeldung: "test.html: No such file or directory"
Wieso bekomme ich diese Fehlermeldung nicht von meinem PHP-Script?
weil exec offensichtlich nur die Ausgabe auf die Standardausgabe zurückliefert, nicht aber die Ausgabe auf den Fehlerkanal STDERR. Fehlermeldungen werden jedoch nach STDERR und nicht STDOUT ausgegeben. Du müsstest bei Deinem Ansatz STDERR entsprechend umleiten, siehe Benutzeranmerkungen zu exec().
Grundsätzlich empfehle ich Dir jedoch vorheriges Prüfen auf Existenz der Datei, was auch in der Shell erfolgen könnte. Warum gehst Du so kompliziert vor, nur um den Inhalt einer Datei auszugeben? Warum more und nicht cat? Warum überhaupt Shellkommandos?
Freundliche Grüße
Vinzenz
warum testest Du nicht vorher auf Existenz der Datei?
Es handelt sich bei der Problembeschreibung nur um ein Beispiel, ich wollte möglichst einfach einen Fehler provozieren.
In meinem eigentlichen Script rufe ich eine Applikation auf, die kann unzählige verschiedene Fehler ausgeben.
weil exec offensichtlich nur die Ausgabe auf die Standardausgabe zurückliefert, nicht aber die Ausgabe auf den Fehlerkanal STDERR. Fehlermeldungen werden jedoch nach STDERR und nicht STDOUT ausgegeben. Du müsstest bei Deinem Ansatz STDERR entsprechend umleiten, siehe Benutzeranmerkungen zu exec().
Okey vielen Dank. Das hat mir schom mal sehr geholfen, werde dem mal nachgehen.
Hello,
warum testest Du nicht vorher auf Existenz der Datei?
Damit würde er auch nur einen "TOCTOU-Fehler" provozieren (
Ein solcher ist ein _echter_ _Programmierfehler_, während Jones eigetnlich nur eine "Fehlermeldung" abfragen wollte, die an dieser Stelle sogar vorgesehen und wichtig sein kann.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
Okey, Problem gelöst.
Lag an dem was Vinzenz angesprochen hat (STDOUT/STDERR).
Auf folgender Seite ist die umleitung ser gut erklärt: http://www.cpqlinux.com/redirect.html
Vielen Dank
Grüsse Jones