Downloader на PHP с поддержкой докачки.

В свое время столкнулся с проблемой когда нужно скрыть реальный URL скачиваемого файла.Обычным выходом из такой ситуации есть следующее.

PHP читает содержимое файла.

Выводит соответствующие заголовки файла (headers)  (имя файла, размер и тип ) и печатает содержимое на страницу.

Пример


Где $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 thoughts on “Downloader на PHP с поддержкой докачки.”

  1. Привествую.
    А возможно-ли этим же PEAR-ом ограничивать скорость или же количество потоков с одного IP ?

  2. Нет к сожалению это не возможно.
    Вот фичи этой библиотеки.

    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 хоста.

  3. BandwidthController ограничивает только скорость и, мало того, он есть только для никсов.
    Нет-ли, случаем, какого-нибудь готового расширения этих же PEAR, PECL или других сборок?

Leave a Reply

Your email address will not be published. Required fields are marked *