Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отдача файла через PHP, Не всегда отдает заголовок 
V
    Опции темы
tolik777
Дата 9.1.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Как то давно дорабатывал один скрипт для отдачи файла через PHP и поддержку докачки.
Вот код:
Код

$fileName = DIR_FS_DOWNLOAD . $downloads['orders_products_filename']; 

$fp = fopen($fileName, 'rb'); 

$fsize = filesize($fileName); 

if (!empty($_SERVER["HTTP_RANGE"])) {        //Если заголовок докачка есть, то определяем смещение
    $range = $_SERVER["HTTP_RANGE"]; 
    $range = str_replace("bytes=","",$range); 
    $range = str_replace("-","",$range); 
    if ($range) { 
        fseek($fp, $range); 
        header("HTTP/1.1 206 Partial Content"); 
    }

else {                                                    //Если заголовка HTTP_RANGE нет, то начинаем закачку сначала
    $range = 0; 
    header("HTTP/1.1 200 OK"); 
}

$fname = trim(htmlentities($downloads['orders_products_filename']));

header("Content-Type: application/octet-stream");
header("Content-Disposition:attachment; filename=$fname"); 
header("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
header("Pragma: no-cache");
header("Accept-Ranges: bytes"); 
header("Content-Length: ".($fsize-$range)); 
if ($range) { 
    header("Content-Range: bytes ".$range."-".($fsize-1)."/".$fsize); 
}
fpassthru($fp);

fclose($fp);


Проблема в том, что после установки PHP5.2.0(был 4.4.4) и апача 1.3.37(был 1.3.33) перестало иногда передаваться имя файла, хотя не всегда. Отдается файл download.php. Х
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 9.1.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(tolik777 @  9.1.2007,  14:28 Найти цитируемый пост)
$downloads['orders_products_filename'];

Откуда берется?

PM ICQ   Вверх
AztEK
Дата 9.1.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Вот пример скрипта, использующего докачку: http://evgeny.neverov.name/articles/pretty-good-download/

P.S. с кодом не разбирался


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
tolik777
Дата 9.1.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Блин только сейчас увидел, что запостилось только половина моего сообщения. Куда то вторая часть потерялась.

$downloads['orders_products_filename'];  - это из БД береться

А писал я там, что $downloads['orders_products_filename'] - имеет вид "каталог/имя файла", к примеру: arx/zenon.rar и т.п. Может быть из-за этого?

В приведенном выше коде не пойму зачем header('Connection: close'); ?
И обязательно ли ETAG использовать: header('ETag: "' . $etag . '"'); ?
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 9.1.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(tolik777 @  9.1.2007,  15:33 Найти цитируемый пост)
Может быть из-за этого?

Естественно.

Цитата(tolik777 @  9.1.2007,  15:33 Найти цитируемый пост)
В приведенном выше коде не пойму зачем header('Connection: close'); ?
И обязательно ли ETAG использовать: header('ETag: "' . $etag . '"'); ? 

Незнаю, надо в rfc копаться. Может для дозакачки нужно.,

http://seolab.ru/add/rfc2068/ - rfc
PM ICQ   Вверх
tolik777
Дата 10.1.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Спасибо. Действительно из-за /
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.