We had an issue with some PHP scripts timing out so tried to get the script to return some empty text just to keep the connection alive. What a pain! Finally I figured out the three things that were required:
1.
FcgidOutputBufferSize 0in your fcgid config file (/etc/apache2/conf.d/fcgid.conf in my case, on Ubuntu 10.04)
2.
output_buffering = Offin your PHP config file (/etc/php5/cgi/php.ini in my case, on Ubuntu 10.04)
3. And this was the real pain, because I spent ages testing with a file that was never going to work!!
You need to send at least 1024 bytes (1K) before you can flush(). This is the code for my *working* test file:
echo str_repeat(" ", 1024);
echo "Test1";
flush();
sleep(3);
echo str_repeat(" ", 1024);
echo "Test2";
(blogger doesn't like me putting the opening and closing php tags around that code, but they should be there)
If it's working correctly, you should see the first line, then three seconds later the second line. If it's not working correctly, it will wait for three seconds and load both lines at the same time.
Hope this helps someone!