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 или других сборок?