首页 > 解决方案 > 在 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 按键(空输入)。

可能吗?由于这个错误,我无法告诉你有多少次我不小心在一个循环中执行了两个操作......

我认为这是不可能的,那么?

标签: phpwindows

解决方案


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 ...;

这不会阻止生成新行,但不会执行下一行。


推荐阅读