在PHP中检测stdin中的EOT

时间:2016-04-16 17:47:50

标签: php stdin

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

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

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

1 个答案:

答案 0 :(得分:0)

部分答案:两者

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

    成功并允许程序终止。将后一种比较应用于\x04具有相同的效果 Ctrl + D 用于并继续具有。