Re: PHP CLI setting cooked terminal mode

From: Date: Mon, 16 Sep 2013 20:17:21 +0000
Subject: Re: PHP CLI setting cooked terminal mode
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
I've seen something similar on Debian; it might be a patch that
your distro is shipping on top of PHP.

Edward

Excerpts from Alain Williams's message of Sat Sep 14 04:45:41 -0700 2013:
> Hi,
> 
> I am running a PHP script at the command line and piping the output through less:
> 
>     ./myScript | less
> 
> Since less is an interactive program it puts the terminal into 'raw' mode so
> that it can read characters one at a time. However, when I do the above I find
> that the commands that I type to less are echoed back to me and not acted on
> until I type <RETURN>. This is not as it should be.
> 
> The sript is not doing anything clever, just generating 100 lines:
>     for($i = 0; $i < 100; $i++)
>         echo "i=$i\n";
> 
> If I run the script under strace I see:
> 
>     ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
>     ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
> 
> What is happening is that PHP is putting the terminal into cooked mode.
> 
> 
> I can get it to not do this by connecting stdin to /dev/null:
> 
>     ./myScript < /dev/null | less
> 
> another way of getting it to work is (and this shows that it really is PHP that
> is messing the tty modes):
> 
>     ./myScript < /dev/null | (sleep 10; less)
> 
> However: PHP should not set the terminal to cooked mode in the first place.
> 
> Is there any way in which I can get PHP to not do this ?
> 
> TIA
> 
> I am running PHP 5.3.3 on CentOS 6.
> 
> I posted this to [email protected] a few days ago, but did not get a
> sensible reply.
> 


Thread (12 messages)

« previous php.internals (#69153) next »