Чтобы окончательно внести ясность в этот вопрос.
Что можно сделать на чистом PHP:
1. в силу того что PHP начинает свою работу лишь после полной загрузки HTTP-запроса (а файл - его часть), нельзя получать информацию о ходе процесса загрузки. Можно лишь отправлять файл во фрейм, читать папку временных файлов и прикидывать по времени создания. Плюсы: простота, минусы: может возникнуть путаница при одновременной загрузке, но это можно устранить создав своего рода очередь. Я собираюсь в скором времени написать такой скрипт.
2. Вручную "слушать" порт и обрабатывать запросы закачки. Плюсы: нет вероятности ошибки. Минусы: не везде дадут слушать порт (понаставили файрваллов всяких, блин).
Использование CGI или патч решает проблему, но это доступно далеко не всегда.