【问题标题】:Detecting EOT from stdin in PHP在 PHP 中从标准输入检测 EOT
【发布时间】:2016-08-08 15:10:45
【问题描述】:

似乎是一项非常简单的任务,但我很难确定通过标准输入向 PHP [5.5.x] 提供的输入的结束。 fgets(STDIN) 似乎决定停止等待没有可识别信号的输入,而不是传递 0x04 EOT 字符来限制最终字符串。最明显的演示就是通过代码:

<?php
while(substr(rtrim(fgets(STDIN), PHP_EOL), -1) != 0x04) {
    echo "Input received.";
}

Ctrl+D 之后,循环立即收紧并重复“收到输入”。溢出到标准输出而不是检测 EOT 或等待进一步的输入。这是为什么呢?

【问题讨论】:

    标签: php stdin


    【解决方案1】:

    部分答案:两者都有

    1. 通过管道传递\x04 并与0x04 文字进行比较,然后
    2. 传递 \u0004 [使用 NodeJS 的 child_process] 并与 mb_convert_encoding('&amp;#x0004;', 'UTF-8', 'HTML-ENTITIES') 创建的 EOT 字符进行比较

    成功并允许程序终止。将后一个比较应用到 \x04Ctrl+D 过去和现在的效果相同。

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 2021-02-16
      • 2013-08-10
      • 2011-04-27
      • 2012-04-25
      相关资源
      最近更新 更多