ID: 24033 Comment by: PJ at Elitegamer dot com Reported By: thomas at nimstad dot com Status: Open Bug Type: Documentation problem Operating System: Win32 PHP Version: 4.3.2 New Comment:
I too am experiencing this changed behavior. Previously, my code was as follows: $contents = fread ($fp, 2097152); And that would return up to 2mb from the given socket. In my case, the socket was a fopen() url. However, when I upgraded to PHP 4.3.2 it would ONLY return 2481 bytes no matter what. As a quick fix I had to move the fread() inside of a while loop, in order to fix this issue. Like this: $contents = ""; while (($data = fread ($fp, 2097152)) !== "") { $contents .= $data; } The only change on my system and the files being read was my upgrading to PHP 4.3.2. This definitely appears to be changed behavior of fread(). -PJ Previous Comments: ------------------------------------------------------------------------ [2003-06-05 02:56:25] thomas at nimstad dot com I don't think it's a documentation problem of fread(). The posted code worked fine in 4.3.1 but failed when upgrading to 4.3.2 (Win32 version). Problem 1: fread($fp, 4096) returns max 1024 bytes. Problem 2: fread($fp, 1024) hangs until timeout if buffer only contains 1023 bytes. /Thomas ------------------------------------------------------------------------ [2003-06-05 02:45:00] [EMAIL PROTECTED] Can you please tell us where in the documentation this is done wrong? ------------------------------------------------------------------------ [2003-06-05 02:28:46] thomas at nimstad dot com Problem: fread() hangs if not reading exact number of bytes from a socket. worked previously in 4.3.1. fread() returns max 1024 bytes even if specifying larger numbers. worked previously in 4.3.1. Worked previously (snipped): $fp = fsockopen("localhost", 5410, $errno, $errstr, 100); // Send request if (!fputs($fp, $packet, strlen($packet))) { } // Read result header while (!feof($fp)) { $line = fgets($fp); if ($line != "\n" && $line != "\r\n") { $header .= $line; } else { if (preg_match('/Content-Length: (\d+)/i', $header, $matches)) $length = $matches[1]; if (preg_match('/X-Session-Id: (\d*)/i', $header, $matches)) $session = $matches[1]; break; } } // Read result body $reply = fread($fp, $length); This hangs the executions until timeout (30 sec). Have to change the read result body to: while (!feof($fp) && $length > 0) { $size = min(1024, $length); $reply .= fread($fp, $size); $length -= $size; } All examples in documentation and even the PEAR/XML-RPC class states the "old" way what it looks to me. What's up? New settings that i'm not aware of? /Thomas ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=24033&edit=1 -- PHP Documentation Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php