Downloader на PHP с поддержкой докачки.
В свое время столкнулся с проблемой когда нужно скрыть реальный URL скачиваемого файла.Обычным выходом из такой ситуации есть следующее.
PHP читает содержимое файла.
Выводит соответствующие заголовки файла (headers) (имя файла, размер и тип ) и печатает содержимое на страницу.
Пример
<?php $filename="/some_secret_folder/file.mp3"; header("Content-Type: audio/mpeg"); header("Content-Disposition: attachment; filename=".basename($filename)); header("Content-Length: ". filesize($filename)); readfile($filename); ?>
Где $filename путь к файлу. У данного способа есть несколько минусов. Один из них не поддерживается докачка. Для того чтобы скрипт поддерживал докачку он должен отдавать кусок тела файла (header(Content-Range:xxx)) в зависимости от полученого заголовка ($_SERVER["HTTP_RANGE"]). Конечно это можно было написать самому но я решил воспользоваться готовым решением на PEAR
< ?php $filename="/some_secret_folder/file.mp3"; ini_set('include_path', ini_get('include_path').PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . ‘pear/PEAR’); // добавляем в пути инклудов папку куда установлен на сайте PEAR require(”HTTP/Download.php”); // Подключаем HTTP_Download $dl = &new HTTP_Download(); // Создаем экземпляр класса $dl->setFile($filename); //указываем какой файл $dl->setContentDisposition(HTTP_DOWNLOAD_ATTACHMENT, basename($filename))); // Устанавливаем имя с которым будет скачиваться файл $dl->setContentType(”audio/mpeg”); // Устанавливаем тип файла $dl->send(); ?>

3 comments to “Downloader на PHP с поддержкой докачки.”
Декабрь 20th, 2008 at 12:23
Привествую.
А возможно-ли этим же PEAR-ом ограничивать скорость или же количество потоков с одного IP ?
Декабрь 20th, 2008 at 21:25
Нет к сожалению это не возможно.
Вот фичи этой библиотеки.
It features:
- Basic caching capabilities
- Basic throttling mechanism
- On-the-fly gzip-compression
- Ranges (partial downloads and resuming)
- Delivery of on-the-fly generated archives through Archive_Tar and Archive_Zip
- Sending of PgSQL LOBs without the need to read all data in prior to sending
Я знаю есть модуль для апача mod_bandwith которым возможно выставить ограничение для www хоста.
Декабрь 21st, 2008 at 00:36
BandwidthController ограничивает только скорость и, мало того, он есть только для никсов.
Нет-ли, случаем, какого-нибудь готового расширения этих же PEAR, PECL или других сборок?