The inherent problem is this: During a POST upload, the uploaded data is passed via the HTTP request headers. When the web server recieves a request for a PHP file, it passes the request headers along to PHP. Then, PHP reads all
of the headers at once, before
it starts executing the script. So essentially, until the entire data is finished sending, PHP can't do anything -- so there's no way to update a progress bar via PHP while the upload is happening. This is a limitation of PHP. If this limitation were overcome in a subsequent version of PHP, it would make a lot of people happy, especially since ASP does not have this limitation (it's able to read and process headers one small chunk at a time).
The only PHP-only solution I found is mentioned in this post
. Unfortunately, it requires you to patch and recompile PHP, which isn't for the faint of heart. And the author misspelled "meter", but we can forgive him for that. The upshot is that it appears to work quite well. The author has put the source code and a demo on this page