SoaringHawk
Постоялец
- Регистрация
- 25 Апр 2009
- Сообщения
- 61
- Реакции
- 2
- Автор темы
- #1
Есть класс Для просмотра ссылки Войди или Зарегистрируйся
Необходимо учитывать переданный трафик. К функции send прикрутил mysql запрос:
Но проблема в том, что по окончании передачи, "received" в базе не сходится с размером передаваемого файла. Например, файл весит 594518108 байт, а в безе записано 634203857
Эмпирически выяснилось, что до момента одобрения пользователем закачки, или браузер, или какой-либо DL-менеджер успевает слить в бефер определенный кусок.
Для примера:
Тестил с "Download Master"-ом. Добавляю ссылку на закачку, появляется менюшка выбора куда сохранять и вот в этот момент (пока я выбирал папку назначения) мастер уже загрузил 42991616 байта... После того, как я стартанул закачку он по новой закачал весь файл т.е. 594518108 байт. В итоге и получалось, что фактически было передано 637509724 байта.
Может у кого появятся соображения, как можно "правильно" учитывать сколько пользователь скачал по этой временной ссылке. Это нужно для того, что бы не ограничивать клиента по времени, а ссылку "убивать" когда он полностью скачает файл.
Необходимо учитывать переданный трафик. К функции send прикрутил mysql запрос:
PHP:
$bufSize_portion = 0;
while ( !feof($fd) && (connection_status() == CON_STATUS_NORMAL) )
{
$contents = fread ($fd, $this->bufSize);
echo $contents;
//$this->updateDB(strlen($contents));
$bufSize_portion += strlen($contents);
// обновляем каждый мегабайт скачанного
if($bufSize_portion >= 1024 * 1024 * 1)
{
//$this->updateDB($bufSize_portion);
//$bufSize_portion = 0;
}
}
fclose ($fd);
// финальное обновление
$this->updateDB($bufSize_portion);
$bufSize_portion = 0;
}
} // end function send
function updateDB($bufSize)
{
$this->mysql->query("UPDATE `table` SET received=received+".$bufSize." WHERE `key`='".$key."' LIMIT 1");
}

Эмпирически выяснилось, что до момента одобрения пользователем закачки, или браузер, или какой-либо DL-менеджер успевает слить в бефер определенный кусок.
Для примера:
Тестил с "Download Master"-ом. Добавляю ссылку на закачку, появляется менюшка выбора куда сохранять и вот в этот момент (пока я выбирал папку назначения) мастер уже загрузил 42991616 байта... После того, как я стартанул закачку он по новой закачал весь файл т.е. 594518108 байт. В итоге и получалось, что фактически было передано 637509724 байта.

Может у кого появятся соображения, как можно "правильно" учитывать сколько пользователь скачал по этой временной ссылке. Это нужно для того, что бы не ограничивать клиента по времени, а ссылку "убивать" когда он полностью скачает файл.