2017-10-25 17 views
-1

は、私には、例えば、ファイル出力で使用されることを意図して、コマンドラインPHPスクリプトを持っている:PHPフォースコマンドライン出力

php script.php -arg > file.txt 

を、私は、このファイルにエラー/例外があるとします。私はそれをキャッチしないままにすることができます(throwを使用する場合と使用しない場合があります)。コマンドラインには望ましくないものが出力されるか、キャッチして出力がfile.txtになり、すぐにそれを見ない。

スクリプトの残りの部分がファイルに書き込むものに影響を与えずに、確実にコマンドラインに出力する方法はありますか?

+1

例外をキャッチしにエラーメッセージを書き込む[ 'stderr'](http://php.net/manual/en/features。 commandline.io-streams.php)。 'stdout'だけをリダイレクトしたため、画面に表示されます。 – axiac

+0

ありがとう、それは働いた。私はこれらの可能性を認識していませんでした。あなたが答えとしてそれを投稿するなら、私は受け入れます。 – Ynhockey

答えて

1

コードで例外をキャッチし、エラーメッセージを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). 
} 

出力がリダイレクトされていない場合、stdoutstderrに送信されたコンテンツが画面上に来る両方のストリームが端末に関連付けられているからです。

あなたはfile.txtだけstdoutにリダイレクトする場合は、stderr(エラー・メッセージ)に書かれているコンテンツが端末に表示されます。また、同じファイルまたは別のファイルにstderrをリダイレクトすることができます

# 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