I have a few conceptual questions (all related, I think) regarding the following script, at the comments. The script works fine.
<?PHP
ob_start();
// Create string to overflow browser buffer ...?
$buffer = str_repeat(" ", 4096);
// Indicate new header / html content ...?
$buffer .= "\r\n<span></span>\r\n";
for ($i=0; $i<5; $i++) {
echo $buffer.$i;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
?>
First, why do I need to send the \r\n<tag>\r\n
to the browser? I assume it has something to do with headers.
Second, why do I need some HTML in the middle?
Third, there are many examples that use 256 bytes instead of 4096. However, the script doesn't work if I use 256. Are these examples outdated, and will this number change again in the future?
//EDIT REGARDING SOURCE LINKS
This code was gathered mainly from the commentary in php.net sleep()
function and the solution to this SO question. Neither mentions why to include \r\n
.
//EDIT REGARDING HEADERS
If I don't add \r\n
, an HTML tag, and a second set of \r\n
, the script will not execute properly in Chrome or Safari (it just dumps all the values at once).
Additionally, if this is called before a session_start()
, it throws an error: "Cannot send session cache limiter - headers already sent".
php.ini
output buffering setting.\r\n
is just a typical Windows environment newline. – Kaput$i
variable? – Stitching\r\n
– Kaput