Многие интернет-проекты (неважно, что это: движки форумов, фотогалереи или что-то ещё) позволяют пользователям загружать файлы на сайт и скачивать их оттуда.
С закачкой проблем не возникает никогда.
А вот со скачиванием закачанных файлов зачастую бывает одна маленькая проблема: многие вебмастера хотят знать, сколько раз был скачан тот или иной файл. Что же они делают? Очень просто: дают ссылку не на собственно файл, а на некоторый скрипт, который выглядит примерно так: // тут подсчёт скачиваний, разные действия // а дальше: просто выдача всего содержимого файла, примерно так: readfile ($filename); ?>
И всё бы ничего, но: Файлы порой бывают очень большими, а связь — очень некачественной.
Ну и что? А очень просто: выданный таким образом файл нельзя скачивать порциями. То есть ни один менеджер скачиваний (например, ReGet, FlashGet или Download Master и прочие) не смогут: Скачивать файл в несколько потоков; Приостановить скачивание в любой момент, а через некоторый промежуток времени начать скачивать файл с места остановки (а ведь в этом и суть докачки).
Что делать?
Вот и меня посетила такая мысль. Полчаса экспериментов — и у меня получилась очень хорошая функция. Отдаю её Вам: function downloadFile($filename, $mimetype=’application/octet-stream’) { if (!file_exists($filename)) die(’Файл не найден’);
Функция принимает два параметра: $filename — полный путь до файла, $mimetype — MIME-тип файла (если не знаете, что это такое — не указывайте второй параметр при вызове функции).