知道php脚本是否已提交到输出重定向

时间:2014-04-29 13:08:48

标签: php bash command-line

我有一个在终端中运行的php脚本,它返回一个数字,这个数字是人性化的格式化所以:

php script.php

例如输出:1 020 536

但有时我们需要这个脚本将数字输出为计算机友好版本,所以在我的情况下:

1020536

是否可以直接从php脚本中检测它是直接调用还是以下列方式调用:

echo $(php script.php)

php script.php | cat

两个版本都应该输出非格式化的数字。

这可能吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以使用posix-isatty执行此操作。这是一个例子;

您可以实施的script.php

;

<?php

if ( !posix_isatty(STDOUT) ) {
    fwrite(STDOUT, "You piped this script to another command");
    exit(2);
}
fwrite(STDOUT, "Called directly");

exit(0);

?>

更新:仅供收入者使用:

posix_isatty可帮助您检测脚本输出是否通过管道传输到其他地方。在上面的情况下,posix_isatty(STDOUT)表示,您的PHP脚本输出到终端。如果你像php script | cat一样管道你的php脚本,posix_isatty(STDOUT)将是false。因为,您已将脚本的输出重定向到cat作为输入。换句话说,您将脚本输出重定向到不是终端的位置。