Currently I have Chrome on OS X Snow Leopard updating a page as it is sent more data, BUT it only does this after I send it <body> along with 1013 more characters (making 1019 total characters). After it receives this it immediately displays it and then displays anything else as it is received. (Note that this browser-operating system combination isn't necessarily the only one, it's just the only one I've tested.)
In order to do this using php, I've done nothing but send ob_flush() after each echo or print. I can also make it happen without ob_flush() by calling ob_implicit_flush(), then ob_end_flush() before print, and then it updates with each print after that. I have pretty typical settings and I change none of them when the file runs, it literally looks like this:
<?php
ob_implicit_flush();
ob_end_flush();
?><body>[1013 more characters]<?php
for ($i = 1; $i < 30000000; ++$i) {}
echo "something that didn't show up immediately";
?>
(Ok, the "[1013 more characters]" part wasn't strictly literal.)
If you want just text in the browser, you do this before everything else:
<?php
header("Content-type: text/plain");
...
?>
Then it won't care whether you sent a body tag, it will just wait for 1019 characters.