Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скачивание файла пользователем

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Хозяин Огня
Отправлено: 19 Октября, 2010 - 10:04:39
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Есть код, отдающий юзеру файл:

PHP:
скопировать код в буфер обмена
  1. if($GET['rem'] == 'dwnl')
  2. {
  3.     $file = IRB_ROOT .'skins/files/25.jpg';
  4.     $fsize = filesize($file);
  5.     $ftime = date("D,d M Y H:i:s T", filemtime($file));
  6.     $f = fopen($file, "rb");
  7.     header('Content-Disposition: attachment; filename="1.jpg"');
  8.     header('Accept-Ranges: bytes');
  9.     header('Content-Transfer-Encoding: binary');
  10.     header("Last-Modified: $ftime");
  11.     header('Pragma: no-cache' );
  12.     header('Content-Description: File Transfer' );
  13.     header('Content-Type: application/octet-stream');
  14.     header("content-length: $fsize");
  15.     fpassthru($f);
  16.    
  17.    
  18.     header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
  19.     fclose($f);
  20.  
  21. }


Честно говоря, не понимаю предназначения большинства из этих заголовков, но файл отдаётся. Проблема в том, что содержимое файла теряется. Скажем, если я скачиваю текстовый файл, то в нём оказывается нтмл-код, а не нужный текст, если изображение - то просмотр становится недоступным.
Подскажите пожалуйста, в чём ошибка.
 
 Top
Stas.progger
Отправлено: 19 Октября, 2010 - 10:09:41
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Тип передаваемого содержимого, исходя из предоставленного кода, одинаковый для всех файлов.

PHP:
скопировать код в буфер обмена
  1. header('Content-Type: application/octet-stream');


Необходимо определять mime тип файла, и подставлять в данный заголовок перед отдачей пользователю.

Must read
 
 Top
Хозяин Огня
Отправлено: 19 Октября, 2010 - 10:47:52
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Stas.progger, нельзя ли поподробнее, пожалуйста.
Копался в нете, во всех примерах этой строчкой всё ограничиватся.
 
 Top
Stas.progger
Отправлено: 19 Октября, 2010 - 10:59:18
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Хозяин Огня пишет:
нельзя ли поподробнее, пожалуйста.
Копался в нете, во всех примерах этой строчкой всё ограничиватся.


http://www.php[dot]net/manual/en/fun[dot][dot][dot]header.php#48538
 
 Top
Хозяин Огня
Отправлено: 19 Октября, 2010 - 11:12:39
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Инглиш...(

Ну даже если так:

header('Content-Type: application/jpg');

или там

header('Content-Type: application/img');

содержимое всё-равно не доступно...
 
 Top
JustUserR
Отправлено: 19 Октября, 2010 - 11:13:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Stas.progger пишет:
Тип передаваемого содержимого, исходя из предоставленного кода, одинаковый для всех файлов.
При использовании механизма передачи файла пользователю с помощью специального формата HTTP-документа ответа - включающего в себя заголовок Content-disposition значение передаваемого MIME-пути в общем случае не имеет значения и может быть произвольным - дело в том что указанная схема передачи указывает браузеру клиента на необходимость загрузки файла без его локальной обработки - в то время как дальнейшие операции по запуску файлу определяются системой ассоциаций ОС по расширению файла или другим локальным критериям


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Хозяин Огня
Отправлено: 20 Октября, 2010 - 14:13:04
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




JustUserR пишет:
При использовании механизма передачи файла пользователю с помощью специального формата HTTP-документа ответа - включающего в себя заголовок Content-disposition значение передаваемого MIME-пути в общем случае не имеет значения и может быть произвольным - дело в том что указанная схема передачи указывает браузеру клиента на необходимость загрузки файла без его локальной обработки - в то время как дальнейшие операц


А в чём конкретно ошибка, можно узнать?
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Октября, 2010 - 21:03:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Блин, ёхарный бабай:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['download'])) {
  2.         $file = '/path/do/filename.txt'; // или любое др расширение
  3.         $filename = 'имя которое увидит юзер.txt'; // расширение тут обязательно
  4.         header ('Content-Type: application/octet-stream');
  5.         header ('Accept-Ranges: bytes');
  6.         header ('Content-Length: '.filesize($file));
  7.         header ('Content-Disposition: attachment; filename='.$filename);
  8.         readfile($file);
  9.         exit();
  10.         }
 
 Top
JustUserR
Отправлено: 21 Октября, 2010 - 07:42:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Хозяин Огня пишет:
А в чём конкретно ошибка, можно узнать?
Причиной возникновения ошибки в вашем случае могут является различные факторы связанные с неправильной генерацией целевых пользовательских HTTP-заголовков - в частности необходимо проверить правильность относительного пути к целевому файлу и наличие необходимых привелегий для его открытия и получения служебной информация - которая впоследствии используется в вашем PHP-скрипте для генерации заголовков с временем последнего изменение и размером файла
Кроме того причиной появления лишних данных в выводимом пользователю документе является наличия последнего выражения с функцией header в вашем PHP-скрипте - дело в том что в силу отсутствия буферизации и NPH-режима его содержимое не будет использовать с целевывм назначением - в то время как просмотр изображения может быть блокирован из-за несанкционированного изменения его внутреннего представления


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB