如何在新的输入之前清除php STDIN?

4

我有一个关于php-cli的初学者问题。

我正在使用以下代码:

define("STDIN", fopen('php://stdin','r'));
$input = "";
while($input == "") {
   echo "Please enter : ";
   $input = fread(STDIN, 80);
}

问题是:

如果我输入超过80个字符,比如100个字符,那么多出来的20个字符会被添加到下一个输入中。

我该如何在每次输入之前“清除”STDIN?


我猜在每个fread之前清除STDIN是没有必要的,对吗? - shadyyx
FYI,STDIN已经默认定义为fopen('php://stdin','r')。不需要再次打开它。http://php.net/manual/en/wrappers.php.php - deceze
如果一个类型在一个fread中超过80个字符,比如100个字符,那么额外的20个字符会添加到下一个字符中。 - iizno
2
所以只需 fread 直到没有更多可读的内容。然后 STDIN 就是“空的”。 - deceze
1个回答

2

fread()length参数设置为更高的值(例如1024、2048、10000)-它确定了fread()读取的数据的最大长度。如果您只需要80个字符,那么在读取后使用substr()缩短即可。如果您使用STDIN文档),则无需打开输入流,因为由于对php://stdin的处理错误,建议使用此方法,直到PHP 5.2.1版本为止(文档)。

$input = "";
while($input == "") {
   echo "Please enter : ";
   $input = fread(STDIN, 10000);
}

请注意,STDINSTDOUTSTDERR已经被定义为系统常量。您不应该使用这些名称来定义自己的常量。


感谢您的解释。 - iizno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接