在PHP中,我可以使用以下代码从命令行程序读入输入
$stream = STDIN;
$test = fgets($stream);
echo $test;
这对于简单的输入很有效。但是,如果我尝试使用后退箭头键之类的东西,我的shell看起来像下面这样
This is a test^[[D^[[D^[[D
即,向 shell 发送^[[D
的箭头键转义序列。PHP本身将解释箭头键--即输入此
This is a test^[[D^[[D^[[D^[[Dsecond test
将输出此
This is a second test
但是,我希望shell能够“正确”(即做我认为他们应该做的,而不是字面上我发送的)解释箭头键,以便插入点在键入时移动。
这在PHP中可能吗?有分机吗?没有延期?我试过fgets($stream, 1)
的变体,但似乎PHP只是挂起,直到用户输入回车键。
3条答案
按热度按时间ars1skjm1#
有点棘手,但找到了使用mbstring库的方法:
隐藏 shell 字符打印:
在脚本结束时恢复:
mwg9r5ms2#
没有纯PHP的方法:http://php.net/fgetc(参见注解)
zzoitvuj3#
下面的函数将等待直到用户输入一个字符,然后立即返回。此方法支持多字节字符,因此也适用于检测箭头键按下。
下面是使用上述函数识别箭头键按下的示例: