检测/读取按键,跨平台的PHP CLI

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检测/读取按键,跨平台的PHP CLI相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个跨平台的php实用程序供个人使用,而不是重新发明任何东西。代码将在或多或少内运行

while (true) {
    $key = null;
    $key = check_key_pressed();
    if ($key) do_relevant_magic($key);
    usleep(250000);
}

我需要check_key_pressed()的东西,它将返回一个按下的键的值,而不是等待EOF/EOL,而不是明确要求输入,直到实际按下任何键。

这必须在* nix和windows上工作,所以ncurses不是一个选项。我也不希望exec调用外部vbs或bash脚本,它必须纯粹用PHP完成,希望我不要太多。

编辑:当然我检查了其他SO解决方案,但它们似乎都不是真正的跨平台。 Ncrursesreadline在Windows上不可用,它必须在linux和windows上拦截keydown或keypress或输入就绪。

答案

不幸的是,如果没有针对Windows的类似平台特定扩展(例如* n * x(readlinencurses)),这是不可能的(仍然是今天)。

更糟糕的是,即使你放弃了跨平台的要求,我也怀疑在Windows上有这样的(相当熟知的)扩展。 (People tend to recommend自己为pdcurses(至少本身就是跨平台)这样的东西编写绑定,因为显然没有人完成并发布了一个。)

事情正在慢慢地进展,至少readline扩展是now available for Windows(自7.1),但它恰好只是qa​​zxswpoi功能...

以上是关于检测/读取按键,跨平台的PHP CLI的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中,如何检测执行是从 CLI 模式还是通过浏览器? [复制]

如何检测按键?

如何检测按键?

VSCode自定义代码片段——cli的终端命令大全

PHP-CLI环境变量的设置和读取

VSCode自定义代码片段4——cli的终端命令大全