Improved HTTP/1.1 chunked transfer-encoding example.
The sample code given below by Jack does not function correctly when run against a recent version of Apache (I'm assuming that this did once work, but from the HTTP/1.1 spec I can only assume if it did work it was based mostly on luck).
<?php
$header = "";
$response = "";
if (!($request=fsockopen('example.com',80,$errno,$errstr))) exit($errstr);
else {
socket_set_timeout($request,10);
fwrite($request,$post);
do $header.=fread($request,1); while (!preg_match('/\\r\\n\\r\\n$/',$header));
if (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/',$header))
do {
$byte = "";
$chunk_size="";
do {
$chunk_size.=$byte;
$byte=fread($request,1);
} while ($byte!="\\r"); fread($request, 1); $chunk_size=hexdec($chunk_size); $response.=fread($request,$chunk_size);
fread($request,2); } while ($chunk_size); else {
if (preg_match('/Content\\-Length:\\s+([0-9]*)\\r\\n/',$header,$matches)) {
$response=fread($request,$matches[1]);
} else {
while (!feof($request)) $response .= fread($request, 4096);
}
}
fclose($request);
}
print($header);
print($response);
?>
Richard.