#25568 [Opn]: feof is not working correctly with fsockopen

From: Date: Wed, 17 Sep 2003 06:38:00 +0000
Subject: #25568 [Opn]: feof is not working correctly with fsockopen
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-47685@lists.php.net to get a copy of this message
 ID:               25568
 User updated by:  svan@mailgate.ru
 Reported By:      svan at mailgate dot ru
 Status:           Open
 Bug Type:         Filesystem function related
 Operating System: Linux
 PHP Version:      4.3.3
 New Comment:

Possible workaround:
	$fp = fsockopen("www.xxxxxxxxxx.xx", 80, $errno, $errstr, 30);
	if(!$fp)
	   exit;
	fputs($fp, "GET http://www.xxxxxxxxxx.xx/CENTER.GIF
HTTP/1.0\n\n");
	$qStr = "";
	while(($tmpStr = fgets($fp, 255))) 
           if($tmpStr == "\r\n") break;
           else if( !strncmp($tmpStr, "Content-Length:",
strlen("Content-Length:")) ) $len = (int)substr($tmpStr,
strlen("Content-Length:"));
	while( true  ){
		$rrr = stream_get_meta_data( $fp );
		if( $rrr['eof'] == 1 ) break;
		$qStr.=fread($fp, $len);
		if( strlen( $qStr ) >= $len ) break;
	}
	fclose($fp);


Previous Comments:
------------------------------------------------------------------------

[2003-09-17 02:33:41] svan at mailgate dot ru

Description:
------------
End of file is not detect coorectly when stream open with fsockopen().
When I read binary data from such stream the end of file detected
absolutely unexpected and before real end.

Reproduce code:
---------------
	$fp = fsockopen("www.xxxxxxxxxx.xx", 80, $errno, $errstr, 30);
	if(!$fp)
	   exit;
	fputs($fp, "GET http://www.xxxxxxxxxx.xx/CENTER.GIF
HTTP/1.0\n\n");
	$qStr = "";
	while(($tmpStr = fgets($fp, 255))) 
           if($tmpStr == "\r\n") break;
           else if( !strncmp($tmpStr, "Content-Length:",
strlen("Content-Length:")) ) $len = (int)substr($tmpStr,
strlen("Content-Length:"));
	$qStr=fread($fp, $len);
	fclose($fp);
=========================== OR ==============
$fp = fsockopen("www.xxxxxxxxxx.xx", 80, $errno, $errstr, 30);
	if(!$fp) exit;
	fputs($fp, "GET http://www.xxxxxxxxxx.xx/CENTER.GIF
HTTP/1.0\n\n");
	$qStr = "";
	while(($tmpStr = fgets($fp, 255))) if($tmpStr == "\r\n") break;
        while( !feof( $fp ) $qStr .= fread($fp, 1);
	fclose($fp);


Expected result:
----------------
$qStr contain full content of "CENTER.GIF"

Actual result:
--------------
$qStr contain cutted content of "CENTER.GIF"


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25568&edit=1


Thread (6 messages)

« previous php.bugs (#47685) next »