Re: howto get pgUp, pgDn, delete, home and end keycodes in CLI PHP script
| From: | David OBrien | Date: | Fri, 04 May 2012 14:56:47 +0000 |
| Subject: | Re: howto get pgUp, pgDn, delete, home and end keycodes in CLI PHP script | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-317782@lists.php.net to get a copy of this message | ||
On Fri, May 4, 2012 at 10:48 AM, Andres Gonzalez <andres@packetstorm.com>wrote:
> I am trying to code a CLI PHP script that will give me the keycodes for
> these (and other) keyboard keys. I want to basically block until the user
> presses a single key, then I want to process that event without the user
> having to press the Enter key after pressing a single key.
>
> I have tried several approaches but with no success. Using fopen() to
> open stdin, and fgetc() will give me the regular keys but requires the user
> to press the Enter key after the initial key is pressed. When I press the
> the PgDw key for example, those routines return a single character string
> even though the stty echos a 5 character string (using PgDw echos "^[[6~")
>
> I have tried other approaches using bash read commands to get a single
> character but will little success also.
>
> Anybody here know how to do this?
>
> Thanks,
>
> -Andres
>
> |
> |
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
I think something like this would work
$running = true;
$fp = fopen("php://stdin","r"); //open direct input stream for reading
stream_set_blocking($fp,0); //set non-blocking mode
while ($running) {
while (($buf = fgets($fp, 4096)) != false) {
$buffer .= $buf;
}
if ($buffer != "") {
switch ($buffer) {
case " ": { //exit on space key
exit;
}
default: {
//space not pressed
}
}
$buffer = ""; //empty buffer
}