Re: [PHP] PHP CLI setting cooked terminal mode

[email protected] (Stuart Dallas)
Newsgroups php.general
Message-ID <[email protected]>
On 11 Sep 2013, at 17:37, Alain Williams <[email protected]> wrote:

> 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 really clever, just looking at a few files and
> printing out directory contents, time stamps, ...
> 
> 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
> 
> 
> I can get it to not do this by connect stdout 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.

Make sure output buffering is off by putting this at the top of your script:

while(ob_end_clean());

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.