Bug #1432 Updated: fgets() fails on certain sockets
| From: | andy@php.net | Date: | Sun, 22 Jul 2001 16:29:59 +0000 |
| Subject: | Bug #1432 Updated: fgets() fails on certain sockets | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-60608@lists.php.net to get a copy of this message | ||
ID: 1432
Updated by: andy
Reported By: adam@musicseek.net
Status: Open
Old Bug Type: Feature/Change Request
Bug Type: Sockets related
Operating System: Win32
PHP Version: 4.0
New Comment:
reclassified
Previous Comments:
------------------------------------------------------------------------
[2001-02-10 13:17:18] jimw@php.net
refiling as a bug against 4.0.
------------------------------------------------------------------------
[1999-05-28 07:52:28] sas@cvs.php.net
fgets recognizes a carriage return (CR, '\n', 0xod) as a end-of-line only. The site in
question uses line feeds (LF, ´\r´, 0x0a) as line delimiters.
Moving the report over to feature requests.
------------------------------------------------------------------------
[1999-05-21 04:28:24] adam@musicseek.net
I use PHP/3.06 win32 for writing a web crawler which
indexes URL's.
The indexer has no problems, except on ONE url that I
know of so far which seems to be, as far as I
can ascertain related to the fgets()
function failing to work.
fgets() will not read data from any socket connected
via fsockopen to www.hutman.com port 80. I know this might
seem very strange, but fgets() never seems to be able to determine EOF and hence sits there forever
doing nothing.
I have used a raw telnet session to try and debug this and cannot find why PHP would do this -- it
works fine on every
other URL in the database.
Here is some code that may help:
$sock = fsockopen("www.hutman.com",80);
if ($sock)
{
fputs($sock,"HEAD /dreg/facade/songs/aftk.mp3 HTTP/1.1\n");
fputs($sock,"Host: www.hutman.com\n");
fputs($sock,"User-Agent: HTTP-crawler/1.0\n");
fputs($sock,"Connection: close\n\n");
/* at this point the server responds .. and it indeed does in a telnet session, but PHP simply wont
read the data returned AT ALL. */
while ($buf = fgets($sock,128))
{
$response = $response . $buf;
echo $buf;
}
No variations of this will work.. the fgets() function will timeout after a while.
i have tried while (!feof($sock)) as well, which exhibits similar behaviour, but seems to NEVER
return from the fgets() call .. never times out.
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=1432&edit=1