Re: [PHP] PHP CLI setting cooked terminal mode
On 11 Sep 2013, at 17:37, Alain Williams 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 . 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/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] PHP CLI setting cooked terminal mode
On Wed, Sep 11, 2013 at 05:45:45PM +0100, Stuart Dallas wrote: > On 11 Sep 2013, at 17:37, Alain Williams wrote: > Make sure output buffering is off by putting this at the top of your script: > > while(ob_end_clean()); Sorry, that does not fix the problem - but thanks for trying. -- Alain Williams Linux/GNU Consultant - Mail systems, Web sites, Networking, Programmer, IT Lecturer. +44 (0) 787 668 0256 http://www.phcomp.co.uk/ Parliament Hill Computers Ltd. Registration Information: http://www.phcomp.co.uk/contact.php #include -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] PHP CLI setting cooked terminal mode
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 . 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. -- Alain Williams Linux/GNU Consultant - Mail systems, Web sites, Networking, Programmer, IT Lecturer. +44 (0) 787 668 0256 http://www.phcomp.co.uk/ Parliament Hill Computers Ltd. Registration Information: http://www.phcomp.co.uk/contact.php #include -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php