【问题标题】:PHP Detect if current stdout support ANSI escape charsPHP 检测当前标准输出是否支持 ANSI 转义字符
【发布时间】:2020-11-19 12:04:51
【问题描述】:

让我们有以下脚本:

echo "Hello world\e[5Dmoon!";

使用PHP_SAPI 我能够确定脚本是在 CLI 上还是在 WEB 上运行。

如果从命令行执行脚本,它将输出Hello moon!。但是脚本的输出可以转发到例如文本文件,例如php test.php > output.txt。如果输出被转发,转义字符将不起作用,输出将为Hello world^[[5Dmoon

如何确定当前标准输出是否支持 ANSI 转义字符,以避免不支持的“垃圾邮件”输出?

【问题讨论】:

  • 使用php test.php > output.txt,您仍在写入标准输出。将该缓冲区的内容传递到文本文件中,之后才会使用 > output.txt 部分。
  • 这就是 Symfony 控制台的工作方式:github.com/symfony/console/blob/…

标签: php stdout ansi-escape


【解决方案1】:

您要搜索的函数应该是stream_isatty(STDOUT)

它为您的用例返回正确的值 - web false、终端 true、TXT 中的输出 false。

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多