2017-10-25 2 views
-1

Ich habe eine PHP-Skript-Befehlszeile, die mit Dateiausgabe verwendet werden sollte, zum Beispiel:PHP Force Command Line Output

php script.php -arg > file.txt 

Angenommen, ich habe einen Fehler/Ausnahme in dieser Datei. Ich kann es entweder uncaught (mit oder ohne throw) lassen, und es wird etwas hässlich, dass ich nicht auf die Befehlszeile ausgeben möchte, oder ich kann es fangen, und dann wird jede Ausgabe an file.txt gehen, und der Benutzer gewann Ich sehe es nicht sofort.

Gibt es eine Möglichkeit, um sicher zu zwingen, Ausgabe an die Befehlszeile zu gehen, ohne zu beeinflussen, was der Rest des Skripts in die Datei schreibt?

+1

Fangen Sie die Ausnahme und schreiben Sie die Fehlermeldung auf [ 'stderr'] (http://php.net/manual/en/features. commandline.io-streams.php). Es wird auf dem Bildschirm angezeigt, weil Sie nur 'stdout' umgeleitet haben. – axiac

+0

Danke, es hat funktioniert. Ich war mir dieser Möglichkeiten nicht bewusst. Wenn du es als Antwort postest, werde ich akzeptieren. – Ynhockey

Antwort

1

Fangen Sie die Ausnahme in Ihrem Code und schreiben Sie die Fehlermeldung zu stderr.

try { 
    // code that throws exceptions here 
} catch (Exception $e) { 
    // Report the exception to stderr, to not interfere with the script output 
    fputs(STDERR, $e->getMessage()); 
    // Continue the script as you think it's best (resume the processing or exit). 
} 

Wenn der Ausgang nicht umgeleitet wird, der Inhalt, der zu stdoutstderr und kommen auf dem Bildschirm gemischt gesendet wird (in der Reihenfolge, wie sie erzeugt werden, natürlich), weil beide Ströme an das Endgerät zugeordnet sind.

Wenn Sie an file.txt nur die stdout umleiten, wird der Inhalt, der auf stderr geschrieben wird (Ihre Fehlermeldungen) auf dem Terminal angezeigt. Sie können auch stderr in derselben Datei oder in eine andere Datei umleiten:

# Redirect stderr to a different file (file.err) 
php script.php -arg >file.txt 2>file.err 

# Redirect stdout to a file (file.txt) and duplicate stderr to stdout 
# (to send its output to file.txt too) 
# The order of redirections is important here 
php script.php -arg >file.txt 2>&1