я уже подсказал - проверяй connection_status() перед отправкой нового блока данных (при этом разрывать ничего не надо), тебе и докачка будет... и проходов будет сколько угодно... и более точная проверка - получил пользователь данные или нет.
лично для себя - давно реализовал данную вещь через апплетик для бровзера, который общается со скриптом через хттп (согласен, что лучше натравливать его на демон, но оное так - кроссплатформенней, да и пролазит практически везде, где кроме хттп и почты никого не пускают).
раньше я отдавал данные вот так:
PHP:
while(!feof($file_hand) && (connection_status()==0)){
print fread($file_hand,$chunk_size);
if(connection_status()==0){
$sent_out += $chunk_size;
}
flush();
sleep(1);
}
где - $chunk_size был равен, как правило, 32kb (т.е. со скоростью, с которой отдавалось пользователю), а $sent_out - отданный объем с погрешностью не более 32kb.
если сделать ограничение в один проход, то не сложно считать скаченное пользователем (условно), по запрошенным "HTTP_RANGE", но опять же - погрешность будет в размере отданного.
ну и ко всему прочему - ты не можешь сказать пользователю, что мол ты это уже скачал - нифига больше из этого "HTTP_RANGE" тебе не отдам ибо качалка у тебя перестанет просто качать (ей же не дают, чего зря стараться).
псы - про оплату трафика было сказано, лишь для того, что подразумевается мной под "скачанной пользователем информации" с сервера.