Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: выдача файла с возможностью последующей докачки

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

lonm



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ПОМОГИТЕ ПОЖАЛУЙСТА !!!
 
Не могу никак разобраться как выдавать файл, используя заголовки, с возможностью докачки.
Дайте пожалуйста пример скрипта, который может осуществить это в различных браузерах без ошибок.




Уточнил название. — Svarga.

Всего записей: 19 | Зарегистр. 13-04-2003 | Отправлено: 22:22 05-01-2004 | Исправлено: Svarga, 13:17 06-01-2004
lonm



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь помогите !!!




Замечание за флуд. — Svarga.

Всего записей: 19 | Зарегистр. 13-04-2003 | Отправлено: 11:10 06-01-2004 | Исправлено: Svarga, 12:44 06-01-2004
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lonm
ты что, хочешь фтп-клиент на пхп написать???
Используй возможности апача, он сам позволяет делать докачку. для этого достаточно скормить файл пользователю по прямой ссылке.

Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 12:36 06-01-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно так
 
<?
    $fd = fopen($filename, "rb");  
    if (isset($_SERVER["HTTP_RANGE"])) {  
        $range = $_SERVER["HTTP_RANGE"];  
        $range = str_replace("bytes=", "", $range);  
        $range = str_replace("-", "", $range);  
        if ($range) {  
            fseek($fd, $range);  
        }  
    }
    if (isset($range)) {  
        header("HTTP/1.1 206 Partial Content");  
    } else {  
        header("HTTP/1.1 200 OK");  
        $range=0;  
    }
 
    $fsize = filesize($filename);
 
    header("Cache-control: private");
    header("Content-Type: application/force-download");
    header("Content-Length: ".($fsize-$range));
    header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
    header("Content-Disposition: attachment; filename=".$filename);
    header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
 
    fpassthru($fd);
    fclose($fd);
?>

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:17 06-01-2004
dmka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Читаешь rfc2068 на предмет хедеров Range, Content-Range, Content-Length и ответа 206 Partial Content.
Ничего военного там нет, но писать это самому и отлаживать во всех его проявлениях должно быть лениво , так что я бы воспользовался советом IntenTа

Всего записей: 947 | Зарегистр. 23-04-2003 | Отправлено: 13:32 06-01-2004
lonm



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извините, плохо объяснил что именно нужно.
А нужно вот что:
После клика по ссылке, например download.php, скрипт  выдавал, используя header, браузеру какой-нибудь файл на закачку и выводил окно 'save as'.  
А если пользователь закачивает файл по этой же ссылке с помощью  фтп-клиента, то нужно чтобы была возможность докачки.
 
По прямой ссылке нельзя. Нужно именно через php скрипт.

Всего записей: 19 | Зарегистр. 13-04-2003 | Отправлено: 23:50 06-01-2004 | Исправлено: lonm, 23:54 06-01-2004
Swappp

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lonm
Пример dacuan'а должен работать, правда две строки запрета кэширования помоему лишние.
header("Cache-control: private");
и header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
стоит убрать.
ну и эту строчку надо подправить header("Content-Type: application/force-download"); на правильный тип. для .zip это "application/zip"
для определения правильного типа файла в php есть функция http://www.php.net/manual/ru/function.mime-content-type.php
и скрипт будет выдавать почти такие же заголовки как apache.
 
Добавлено

Цитата:
с помощью  фтп-клиента,

может всетаки с помощью качалок типа reget?

Всего записей: 1716 | Зарегистр. 02-11-2001 | Отправлено: 14:35 07-01-2004 | Исправлено: Swappp, 14:38 07-01-2004
lonm



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё ok. Всё работает.  
Особенно помог пример
dacuanа

Всего записей: 19 | Зарегистр. 13-04-2003 | Отправлено: 21:18 07-01-2004
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: выдача файла с возможностью последующей докачки


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru