Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: скачка файла с файлообменник а сервер как посредник
 
 автор: sl1p   (17.05.2011 в 14:58)   письмо автору
 
 

Как реализовать такую штуку..?

Т.е. юзер вводит ссылку на файл, сервер вытягивает и отдаёт файл клиенту..
В данный момент всё работает, но если к примеру файл весит 1гб, тогда клиент должен ждать пока сервер качнёт файл(а сервер не ахти и валится изза нехватки памяти), а затем отдаст ему(клиенту).

Т.е. я так понимаю нужно качать по кускам, но как это правильно сделать?.. Кусок файла получилось выдернуть, как теперь отдать остальные кусочки, при этом не положив сервер и чтобы файл качался как бы в одном потоке?..

  Ответить  
 
 автор: cheops   (17.05.2011 в 15:28)   письмо автору
 
   для: sl1p   (17.05.2011 в 14:58)
 

Хм... а если ничего не отвечать клиенту, если данных нет?

  Ответить  
 
 автор: sl1p   (17.05.2011 в 17:02)   письмо автору
 
   для: cheops   (17.05.2011 в 15:28)
 

мм не совсем понял о чём вы)
Но случайно наткнулся на такую штуку..

http://i-novice.net/skript-dlya-zakachki-fajla-s-podderzhkoj-dokachki/
Работает, всё хорошо, но не мог бы ктонить объяснить её подробно?)) Ибо как пашет так и не понял.. Т.е. мне кажется что клиент вызывает скрипт постоянно, пока не докачает файл?..

<?
// $filepath – путь к файлу, который мы хотим отдать
// $mimetype – тип отдаваемых данных (можно не менять)
function func_download_file($filepath$mimetype 'application/octet-stream') {
    
$fsize filesize($filepath); // берем размер файла
    
$ftime date('D, d M Y H:i:s T'filemtime($filepath)); // определяем дату его модификации

    
$fd = @fopen($filepath'rb'); // открываем файл на чтение в бинарном режиме

    
if (isset($_SERVER['HTTP_RANGE'])) { // поддерживается ли докачка?
        
$range $_SERVER['HTTP_RANGE']; // определяем, с какого байта скачивать файл
        
$range str_replace('bytes='''$range);
        list(
$range$end) = explode('-'$range);

        if (!empty(
$range)) {
            
fseek($fd$range);
        }
    } else { 
// докачка не поддерживается
        
$range 0;
    }

    if (
$range) {
        
header($_SERVER['SERVER_PROTOCOL'].' 206 Partial Content'); // говорим браузеру, что это часть какого-то контента
    
} else {
        
header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); // стандартный ответ браузеру
    
}

    
// прочие заголовки, необходимые для правильной работы
    
header('Content-Disposition: attachment; filename='.basename($filepath));
    
header('Last-Modified: '.$ftime);
    
header('Accept-Ranges: bytes');
    
header('Content-Length: '.($fsize $range));
    if (
$range) {
        
header("Content-Range: bytes $range-".($fsize 1).'/'.$fsize);
    }
    
header('Content-Type: '.$mimetype);

    
fpassthru($fd); // отдаем часть файла в браузер (программу докачки)
    
fclose($fd);

    exit;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования