Re: Problem with getting non-blocking data from stdin

From: Date: Sat, 20 Sep 2003 04:59:48 +0000
Subject: Re: Problem with getting non-blocking data from stdin
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-163270@lists.php.net to get a copy of this message
Why are you using php:// below? If stdin is a file './stdin' will suffice (or the path instead of ./). If you want to run the PHP script in stdin you should use one of the following: include() include_once() require() require_once() See the manual at php.net for pertinent sections... > if( ($stdin = fopen( 'php://stdin', 'r' )) === false ) > { > echo 'Failed to open STDIN'."\n"; > exit(); > } I seem to remember stream_set_blocking being either experimental or deprecated. If I remember correctly its for use with the function fsock_open(). > stream_set_blocking( $stdin, false ); > > $count = 0; WTF are you thinking? You really need to read the documentation. Instead of this: > while( 1 ) > { > echo 'Foo: '.($count++)."\n"; > if( ($char = fread( $stdin, 1 )) !== false ) > { > echo $char."\n"; > } > else > { > echo 'Fooo!'."\n"; > } > } Try: <?php $stdin = fopen("./stdin","r"); while ($stdin AND (!(feof($stdin)))) { echo fread($stdin,4096); } ?> Much simpler, correct? BTW: The infinite loop you have above could be the reason your script is acting erratically. PHP kills off scripts after they run for so long -- you may just be catching it in different versions of the loop. Also BTW: I understand what you mean when you say CGI but not CLI version of PHP, but I really don't think the term CGI applies in this case. CGI means Common Gateway Interface -- or a way to execute programs in a special directory designed to keep them from r00ting the system. In PHP things such as headers are automatic -- no need to type: print "Content-type: text/html\n\n"; It's a server side scripting language designed to be embedded in things like web pages and be able to be run without much security concerns. (i.e. not running a CGI perl scrip as /usr/bin/perl (i.e. not in tainted mode) -- ouch! and these are the silly things users sometimes do) -Dan

« previous php.general (#163270) next »