PHP强制命令行输出

时间:2017-10-25 12:44:24

标签: php command-line-interface

我有一个命令行PHP脚本,用于文件输出,例如:

php script.php -arg > file.txt

假设我在此文件中有错误/异常。我可以让它保持未被捕获(使用或不使用throw),它会输出一些丑陋的东西,我不想要命令行,或者我可以捕获它,然后任何输出将转到file.txt,用户不会立即看到它。

有没有办法强制肯定输出转到命令行,而不影响脚本的其余部分写入文件?

1 个答案:

答案 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).
}

当未重定向输出时,发送到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