This is down to your browser and how it decides to render the output. Unfortunately there is little you can do to get around that other than to implement AJAX in your page and poll a script on a regular basis to get updates / progress reports.
The ob_flush() method has been one that comes up every few months for many years with all people wanting to do the same as you - All go away disappointed because its unreliable.
Not only do you have your browser which may refuse to display part sent data, you have an ISP, their ISP, the backbone, the datacentre.... There are many places that could be buffering the output from your script. The only real way to see if this works is with a program that accepts http output and displays it as it comes in piece by piece in a TMemo or something. Thats not something your average user will have so again the ob_flush() method you're hoping to use isn't going to be reliable for you.
My helpful sig has gone because a mod below the administrator gave me an infraction - despite the administrator personally agreeing to it.
If you need any php tips or tricks you can PM me.