【问题标题】:Knowing if php script is submitted to an output redirection知道 php 脚本是否提交到输出重定向
【发布时间】:2014-06-15 10:42:58
【问题描述】:

我有一个在终端中运行的 php 脚本,它返回一个数字,该数字是人类友好的格式:

php script.php

例如将输出:1 020 536

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

1020536

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

echo $(php script.php)

php script.php | cat

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

这可能吗?

提前致谢!

【问题讨论】:

  • 你不能用一个参数来定义天气,它应该是人类或机器友好的吗?这将使所述脚本的行为更具可预测性。如果涉及到脚本,那是一件好事,不是吗?与电影和书籍相反? ;D
  • 我可以,但我更愿意按照我要求的方式进行操作^^
  • 请上传您的php文件
  • 您可以只为该文件添加一个初始化集。即ini_set('memory_limit','1GB');
  • @MyWetSocks 你可以用posix_isatty 做到这一点。请参阅我的答案以获取更多详细信息

标签: php bash command-line


【解决方案1】:

您可以使用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 作为输入。换句话说,您将脚本输出重定向到不是终端的地方。

【讨论】:

  • 正是我想要的!谢谢!
  • 你能告诉我这个功能是做什么的吗?..我没有从手册中得到任何东西
  • @CodeLover 我已经更新了我的答案以获取更多详细信息。如果您有任何其他问题,请随时提问。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
相关资源
最近更新 更多