|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-09-17 02:33 UTC] 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"
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 19:00:02 2025 UTC |
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);