sikofitt / getch
                            This package is abandoned and no longer maintained.
                                                                                                The author suggests using the olivebbs/getch package instead.
                                                                                    
                                        
                    
                    Implements _getch and _ungetch for windows and linux using ffi
    1.5.0
    2022-05-17 17:04 UTC
Requires
- php: >=7.4
- ext-ffi: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18
- phpunit/phpunit: ^9.5
README
This simply uses the FFI extension to enable _getch and _ungetch in Windows and linux.
$ composer require sikofitt/getch:dev-master
 use Sikofitt\Console\Getch;
 $g = new Getch($linuxLibrary = null); // can also be a library that implements a function called _getch;
                                       // by default uses the bundled Resources/libgetch.so
                                       // on windows uses the built in _getch function.
 $ord = $g->getch();
 print \chr($ord);
 
 $ord = $g->ungetch('A');
 $res = $g->getch();
 $ord === $res // 65
Note that if you want to put a word into the STDIN stack, you need to do it in reverse.
    foreach(\str_split(\strrev('Hello World!')) as $char) {
        ungetch($char);
    }
    $result = '';
    do {
        $ord = getch();
        $result .= \chr($ord);
   } while($ord !== ord('!'));
   print $result; // Hello World!
There are also helper functions called getch() and ungetch();
use function Sikofitt\Console\getch;
$ord = getch($linuxLibrary = null);
print \chr($ord);
$ord = ungetch('B');
$res = getch();
 $ord === $res // 66
Tests
vendor/bin/phpunit