使用PHP在Windows上以非阻塞模式读取终端输入
我正在尝试在Windows上以非阻塞模式读取。在linux上工作的以下操作在Windows上不起作用:使用PHP在Windows上以非阻塞模式读取终端输入,php,windows,Php,Windows,我正在尝试在Windows上以非阻塞模式读取。在linux上工作的以下操作在Windows上不起作用: stream_set_blocking(STDIN, false); $characters = stream_get_contents(STDIN); 你知道怎么做吗 PHP不允许在windows下使用它,因为windows不支持POSIX流。只有直接使用C API才能实现。幸运的是,PHP自PHP7.4以来提供了一个名为FFI的新API 可以使用以下C函数执行此操作: GetStdHa
stream_set_blocking(STDIN, false);
$characters = stream_get_contents(STDIN);
你知道怎么做吗 PHP不允许在windows下使用它,因为windows不支持POSIX流。只有直接使用C API才能实现。幸运的是,PHP自PHP7.4以来提供了一个名为FFI的新API 可以使用以下C函数执行此操作:
:获取句柄(将其视为流)GetStdHandle
:允许您更改控制台模式(必需,可能的值为SetConsoleMode
),您可能希望在之后恢复控制台模式,但要执行此操作,您需要先使用ENABLE_WINDOW_INPUT | ENABLE_PROCESSED_INPUT
GetConsoleMode
:没有“非阻塞”功能,但您可以知道缓冲区中是否有内容(如果缓冲区中有内容,下一个功能将不会阻塞)GetNumberOfConsoleInputEvents
:获取缓冲输入数组。请注意,这个函数实际上是ReadConsoleInput
或ReadConsoleInputW
在真正的API中,ReadConsoleInput只是一个别名ReadConsoleInputA
PHP不允许在windows下使用它,因为windows不支持POSIX流。只有直接使用C API才能实现。幸运的是,PHP自PHP7.4以来提供了一个名为FFI的新API 可以使用以下C函数执行此操作:
:获取句柄(将其视为流)GetStdHandle
:允许您更改控制台模式(必需,可能的值为SetConsoleMode
),您可能希望在之后恢复控制台模式,但要执行此操作,您需要先使用ENABLE_WINDOW_INPUT | ENABLE_PROCESSED_INPUT
GetConsoleMode
:没有“非阻塞”功能,但您可以知道缓冲区中是否有内容(如果缓冲区中有内容,下一个功能将不会阻塞)GetNumberOfConsoleInputEvents
:获取缓冲输入数组。请注意,这个函数实际上是ReadConsoleInput
或ReadConsoleInputW
在真正的API中,ReadConsoleInput只是一个别名ReadConsoleInputA