php - 在 PHP CLI 上接受空输入时是否可以防止“意外重复”?
问题描述
我试图让用户按 Enter 然后执行操作。我希望用户被要求释放密钥,直到执行下一个操作。目前,用户只需按住 Enter 键,它就会打印所有这些行,因为它只是一一执行。我希望脚本停止,直到他们再次按 Enter 键。
例子:
fgets(STDIN);
echo 'text 1' . PHP_EOL;
fgets(STDIN);
echo 'text 2' . PHP_EOL;
fgets(STDIN);
echo 'text 3' . PHP_EOL;
fgets(STDIN);
echo 'text 4' . PHP_EOL;
fgets(STDIN);
echo 'text 5' . PHP_EOL;
操作:用户按 Enter。
结果:如果您按住 Enter,则会打印所有内容。
想要的结果:只有“文本 1”,直到再次按下 Enter,当“文本 2”应该出现时,等等。
要求用户输入内容是不可接受的;它必须是一个简单的 Enter 按键(空输入)。
可能吗?由于这个错误,我无法告诉你有多少次我不小心在一个循环中执行了两个操作......
我认为这是不可能的,那么?
解决方案
fgets
您可以检查 2 次通话之间的间隔。
$t1 = 0;
function getkey()
{
global $t1;
do
{
fgets(STDIN);
$t2 = microtime(true);
$diff = $t2 - $t1;
$t1 = $t2;
}
while($diff < 0.6);
}
getkey();
echo ...;
getkey();
echo ...;
这不会阻止生成新行,但不会执行下一行。
推荐阅读
- laravel - 如何从组合框中插入值?
- android - 带有“标签”的 Android ListView
- mongodb - MongoDB - 查询较低级别文档中的字段
- python - 如何使用python从复杂的JSON中提取值
- python - Heroku 应用程序无法连接到 Celery worker
- reactjs - 如何使用reactjs有条件地隐藏标题
- python - 当内部列表的数量未知时,如何将列表列表输入 *args?
- android - 我无法在我的 android 应用程序中加载地图平台,只显示徽标
- reactjs - 使用 ReactJS 在数组中推送一个项目
- c# - Roslyn 与 fastcoloredtextbox 集成以获取 c# 的语法错误