我有一个命令行PHP脚本,用于文件输出,例如:
php script.php -arg > file.txt
假设我在此文件中有错误/异常。我可以让它保持未被捕获(使用或不使用throw
),它会输出一些丑陋的东西,我不想要命令行,或者我可以捕获它,然后任何输出将转到file.txt
,用户不会立即看到它。
有没有办法强制肯定输出转到命令行,而不影响脚本的其余部分写入文件?
答案 0 :(得分: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).
}
当未重定向输出时,发送到stdout
和stderr
的内容会在屏幕上混合(当然是按照它们生成的顺序),因为两个流都与终端关联
当您仅重定向到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