Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 9

Как отследить полное скачивание файла?

16.05.2012, 17:23. Показов 2948. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стоит скрипт с поддержкой докачки файла. Качается все как надо, но есть одна деталь: при скачивании download-менеджерами накрутка счетчика происходит, когда файл еще не скачался. Как проконтролировать полную отдачу файла, а потом накручивать счетчик? Может какие-то вычисления с HTTP_RANGE делать? Пробовал readfile, но что толку - он возвращает кол-во байт файла, но неизвестно получил ли их пользователь. Такое ощущение, что никто с этой проблемой не сталкивался, т.к. поик по просторам и-нета результатов не дал. HELP!!!

$name = "filename.mp3";
$filename = "mp3/$name";
if (!file_exists($filename))
{
header ("HTTP/1.0 404 Not Found");
exit;
}
$fsize = filesize($filename);
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if (!$fd){
header ("HTTP/1.0 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if ($_SERVER['HTTP_RANGE']) {
$range = $_SERVER['HTTP_RANGE'];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {fseek($fd, $range);}
}

$content = fread($fd, $fsize);
fclose($fd);
if ($range) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
}

header("Content-Disposition: attachment; filename=".$name);
header("Last-Modified: ".$ftime);
header("Accept-Ranges: bytes");
header("Content-Length: ".($fsize-$range));
header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
header("Content-type: audio/mpeg");

print $content;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2012, 17:23
Ответы с готовыми решениями:

Отследить полное закрытия приложения
Есть ли способ отследить полное закрытия приложения? Это не работает: QObject::connect(qApp, &QApplication::destroyed, () { ...

Как вывести полное содержание файла
#include <iostream> #include <string> #include <fstream> using namespace std; void UserLoggin(string , string ); void...

Как получить полное имя файла?
Подскажите пожалуйста, File file = fileopen.getSelectedFile(); label.setText(file.getName()); Функция getName() возвращает...

2
twister
16.05.2012, 23:50
http://netgen.com.ua/forums/topic.php?id=226 скрипт, которій учитывает скачиванные данные, но он у меня че-то не пашет...
Но алгоритм использовать можно
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 9
23.05.2012, 10:43  [ТС]
Вроде все логично и алгоритмы понятные, но почему-то не работает - выводит весь бинарник в браузер в виде текста несмотря на headers
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2012, 10:43
Помогаю со студенческими работами здесь

Как получить полное имя файла
Здравствуйте! У меня на форме TSaveDialog, вот я сохранил текст с TMemo используя имя например "TRPP.txt" и как мне переменной...

Как реализовать скачивание файла?
И второй вопрос: как правильнее сформулировать (обозвать) "предоставление возможности скачать"? Задание -- веб-приложение,...

Как вывести полное имя файла рисунка
Реализовать интерфейс с объектами, представленными на рисунке. Для кнопок CommandButton1 и CommandButton2 загружаются изображения при...

Как отследить создание файла?
Есть программа. Оператор с ней работает. В процессе работы в определённой папке создаются файлы. Каким образом сделать так, чтобы моя...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru