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]   

> Без описания
Roler
Отправлено: 03 Августа, 2009 - 17:09:06
Post Id



Посетитель


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


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




Задача: отдать изображение пользователю с помощью диалога "Сохранить как".
Найденное решение:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. header("Content-Disposition: attachment; filename=file.dat");
  4. header("Content-Type: application/x-force-download; name=\"file.dat\"");
  5. ?>
  6.  


Сделал так:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.         header("Content-Disposition: attachment; filename=\"".$result['photo_image'].".".$result['photo_ext']."\"");
  4.         header("Content-Type: application/x-force-download; name\"".$result['photo_image'].".".$result['photo_ext']."\"");
  5.         $path = 'uploads/gallery/'.$result['photo_image'].".".$result['photo_ext'];
  6.         $x = fread(fopen($path, "rb"), filesize($path));
  7.     echo $x;
  8. ?>
  9.  


Но есть проблема - в изображение прописывается код страницы, хотя буфер очищаю. Нельзя ли как-нибудь сделать это, и обойтись без создания отдельного скрипта?

(Отредактировано автором: 03 Августа, 2009 - 17:31:30)

 
 Top
Мелкий Супермодератор
Отправлено: 03 Августа, 2009 - 18:03:59
Post Id



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


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


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




Т.е. хотите отдавать файл по запросу пользователя тем же скритом, что и страницу отдаёт?
Тогда с помощью условия разграничьте вывод текста от файла


-----
PostgreSQL DBA
 
 Top
Roler
Отправлено: 03 Августа, 2009 - 18:08:03
Post Id



Посетитель


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


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




Мелкий
Условием там проблематично, но у меня весь вывод буферизуется, пытался схитрить, но не получается. Пусть бы даже открывалось отдельным белым окном, без разницы, но через тот же скрипт.
 
 Top
Мелкий Супермодератор
Отправлено: 03 Августа, 2009 - 20:00:21
Post Id



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


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


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




А почему проблематично условие вставить? Всё равно же скрипту надо указывать явно, когду ему нужно отдавать картинку, а не текст.
С буферизацией вывод не работал пока...


-----
PostgreSQL DBA
 
 Top
Roler
Отправлено: 03 Августа, 2009 - 20:22:15
Post Id



Посетитель


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


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




У меня по сути один скрипт - index.php, в котором всё и инклудится. И до модуля куча всего выводится.
 
 Top
JustUserR
Отправлено: 03 Августа, 2009 - 21:58:13
Post Id



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


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


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




Roler Ну вставьте ДО включения модуля... На худой конец вы можете в самом начала index.php вставить условие выдачи картинки и exit в конце выполения условия
И кстати к слову сказать вы можете заметить что ваша любимая буферизация это не полезно а вредно ибо у вас не структуирован код как надо раз целая проблема добавить условие Улыбка


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



Посетитель


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


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




JustUserR
Это не из-за буферизации, а из-за структуры движка. И она мне нравится, добавлять это непонятное условие ради одного модуля - бр... Улыбка
 
 Top
Roler
Отправлено: 05 Августа, 2009 - 09:37:29
Post Id



Посетитель


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


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




Так, ну что-то я вроде сделал, на локали скачивается и работает. Но, когда я поставил это на сайте, то заметил, что скачивается какая-то недокартинка весом примерно в 35 кило, и её либо нельзя открыть, либо там половины(или даже всей) нету.
Код:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $filename = $_GET['file'];
  4. $path = $_GET['path'];
  5.  
  6. header("Content-Disposition: attachment; filename=\"".$filename."\"");
  7. header("Content-Type: application/x-force-download; name=\"".$filename."\"");
  8. $path = $path.$filename;
  9.  
  10. readfile("../".$path); // Да, путь именно такой. С путём к файлу вообще проблем нет.
  11. echo $image;
  12. ?>
  13.  

(Отредактировано автором: 05 Августа, 2009 - 09:37:59)

 
 Top
Мелкий Супермодератор
Отправлено: 05 Августа, 2009 - 11:34:32
Post Id



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


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


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




А что вы пытаетесь вывести:

На мой взгляд - неинициализированную переменную.

и добавьте проверку перед чтением readfile


-----
PostgreSQL DBA
 
 Top
Roler
Отправлено: 05 Августа, 2009 - 11:40:55
Post Id



Посетитель


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


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




Мелкий
Случайно от старого осталось. Спасибо за замечание о проверке, добавил. Но всё равно не работает.
Что самое интересное, когда я попробовал скачать это не со страницы, а по прямой ссылке - всё сработало.

Вообщем, повозился, подвигал - вроде заработало и на сервере. Хотя, я всё равно ничего не понимаю.

(Отредактировано автором: 05 Августа, 2009 - 12:42:35)

 
 Top
JustUserR
Отправлено: 05 Августа, 2009 - 14:34:41
Post Id



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


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


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




Roler Наверное дело в том что все функции ввода/вывода могут работаь и в текстовм и в двоичном режиме (Картинкам нужен разумеется двоичный)
В Perlе есть специальная функция binmode() а в PHP уже не знаю Улыбка


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



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


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


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




JustUserR пишет:
В Perlе есть специальная функция binmode() а в PHP уже не знаю
Сделайте кто-нибудь раздел про perl и отдайте его на растерзание JustUsery
 
 Top
Roler
Отправлено: 05 Августа, 2009 - 16:54:02
Post Id



Посетитель


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


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




JustUserR
Я файл открываю с ключом rb, то есть бинарный Улыбка
Дело в чём-то другом было.

Champion
Не надо, хоть здесь их нет Радость
 
 Top
JustUserR
Отправлено: 06 Августа, 2009 - 14:04:34
Post Id



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


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


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




Цитата:
Я файл открываю с ключом rb, то есть бинарный
Дело в чём-то другом было.
А причем здесь открывание файла
Уж раз зашел разговор то я скажу - в Perlе функция binmode по умолчанию вовсе не меняет режим открытия файла (Хотя может менять если настроить) а меняет ПОТОК ВЫВОДА то есть проводя аналогию с PHP эта функция бы немного изменила работу оператора echo - я даже уверен что в закромах PHP такая функция имеется Улыбка
По существу проблема происходит изза следующего - как бы вы не открывали файл echo все равно выводит в текстовом режиме а по какимто внутренним причинам при выводе далеко не всех а только некоторых изображений выводится только обрезанный кусок несколько килобайт
Опять попрошу меня не ругать (Плизз Улыбка но проведите эксперимент если хотите - напите простенький скрипт на Perl который выводит одну из тех картинок которая у вас выводилась с ошибкой и попробкйте вывести с binmode и без binmode и как говорится feel the difference
PS Этот эеефект с катинками проявляется толлько в определенным картинках и при определеныхт настройках Apache но binmode решает эту проблему на корню

Champion пишет:
Сделайте кто-нибудь раздел про perl и отдайте его на растерзание JustUsery
Да такие разговоры велись - если повезет то такой раздел когданибудь появится
Roler А вы что имеете против? Подмигивание


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный 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