----- Original Message ----- From: "Alex Shi" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, July 21, 2004 1:39 AM Subject: [PHP] Very weird issue....
> Hi all, > > Please take a look at following very simple script; > > #!/usr/bin/php -q > <? > echo "Hello, world!\n"; > if (!$tty) { > $tty = fopen('php://stdin', 'r'); > } > print "Hello: "; > $ch = fgets($tty, 1024); > print "$ch\n"; > ?> > > I tested it on many servers. Here is how it running (you can > figure out yourself): Firstly it displays "Hello, world!", then > displays "Hello: " at second line and waits for user input; > You input a "yes" and it displays the "yes"; then end. So, on > the screen you will see: > > Hello, world! > Hello: yes > yes > > However, on one of the servers, it doesn't run like above, > but in a reversed way: Firstly, it displays nothing but waits > for your input; you input a "yes", then it displays the "yes", > then "Hello, world!", then "Hello: yes". So, on the screen it > looks like this: > > yes > Hello, world! > Hello: yes > > Weird? To me IT IS! I really don't understand why all the > echos/prints did not function until the script got data from > tty, even they are before fgets.. > > I found this issue during an unsuccessfull pear installation. > The pear installer stopped and waited for my input without > any prompt - there is prompt message but not displayed! > > Can anyone let me know how this can happen? Thanks > in advance! > > Alex > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > I remember this used to happen in c++ because of buffering; there you had to tie STDIN and STDOUT in some cases: cin.tie ( &cout ); Input and output having strict order in program could follow each other not the way you expected. So I see it's caused by stream handling and buffering. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php