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();
?>