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]   

> Без описания
GEN_18
Отправлено: 23 Мая, 2012 - 13:36:59
Post Id



Частый гость


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


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




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


-----
Еще вечера сегодня было завтра.
 
 Top
Viper
Отправлено: 23 Мая, 2012 - 15:18:06
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




PHP:
скопировать код в буфер обмена
  1. header('Content-Disposition: attachment; filename: имя-файла');


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Alho
Отправлено: 23 Мая, 2012 - 15:18:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 322
Дата рег-ции: Апр. 2012  


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




Тут следующая логика. Браузер принимает хэдеры, если он их знает и умеет открыввать - он их откроет, и никак на это мы повлиять не можем.

Но никто не мешает нам подменить хэдер.

Если отдача файла идет через скрипт, то просто шлем ложный хэдер, к примеру:
PHP:
скопировать код в буфер обмена
  1. header("Content-Type: application/octet-stream");


А если они просто лежат на сервере, то тут поможет .htaccess:
PHP:
скопировать код в буфер обмена
  1. <FilesMatch "(\.jpg)$">
  2. ForceType application/octet-stream
  3. </FilesMatch>
 
 Top
GEN_18
Отправлено: 23 Мая, 2012 - 16:46:55
Post Id



Частый гость


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


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




а как этот "header" применть в такой ссылке?
PHP:
скопировать код в буфер обмена
  1. <a href=\"../manager/upload/".$sertif['file']."\"><img src=\"../images/save.png\" title=\"Сохранить\"/></a>

(Отредактировано автором: 23 Мая, 2012 - 16:47:31)



-----
Еще вечера сегодня было завтра.
 
 Top
SAD Модератор
Отправлено: 23 Мая, 2012 - 17:24:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




ссылка должны быть такого вида

CODE (html):
скопировать код в буфер обмена
  1. <a href=\"upload.php?pathtofile='путь_к_картинке'\"><img src=\"../images/save.png\" title=\"Сохранить\"/></a>


должен быть фалй upload.php вида
PHP:
скопировать код в буфер обмена
  1.  
  2. if (!empty ($_GET['pathtofile'])) {
  3.       header('Content-Disposition: attachment; filename: ' . $_GET['pathtofile']);  
  4. }


как-то так
 
 Top
GEN_18
Отправлено: 24 Мая, 2012 - 09:17:39
Post Id



Частый гость


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


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




все равно не получается, он сохраняет файл как пустую html страницу
вот как я прописал
PHP:
скопировать код в буфер обмена
  1. <a href=\"save.php?file=".$sert['file']."\"><img src=\"../images/save.png\" title=\"Сохранить\"/></a>


странно, но такой метод с resize'ом работает....

(Отредактировано автором: 24 Мая, 2012 - 15:44:02)



-----
Еще вечера сегодня было завтра.
 
 Top
GEN_18
Отправлено: 24 Мая, 2012 - 15:40:38
Post Id



Частый гость


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


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




а теперь он ругается, и говорит что не может быть больше одного заголовка
CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning: Header may not contain more than a single header, new line detected. in....line 13

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $path = GetCWD()."/manager/upload/".$_GET['file']."";
  3. $fp = fopen($path,"r");
  4.     if (!$fp)
  5.     {
  6.       print "Файл $path не может быть прочитан";
  7.       exit();
  8.     }
  9.     $file = fread($fp, filesize($path));
  10.     fclose($fp);
  11. if (!empty ($file)) {
  12.  
  13.       header("Content-Disposition: attachment; filename=".$file."");  
  14. }
  15. ?>


-----
Еще вечера сегодня было завтра.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Мая, 2012 - 15:56:02
Post Id



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


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


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




Заголовок Content-Disposition - это заголовок, а не файл. В filename указывается то имя файла, которое будет видеть пользователь (предложено к сохранению).

А содержимое файла надо отдавать в стандартный вывод, тупым echo/print, например.


-----
PostgreSQL DBA
 
 Top
GEN_18
Отправлено: 24 Мая, 2012 - 16:18:31
Post Id



Частый гость


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


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




Ура!!! заработало!!! Спасибо Мелкий за подсказку
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $path = GetCWD()."/manager/upload/".$_GET['file']."";
  3. $fp = fopen($path,"r");
  4.     if (!$fp)
  5.     {
  6.       print "Файл $path не может быть прочитан";
  7.       exit();
  8.     }
  9.     $file = fread($fp, filesize($path));
  10.     fclose($fp);
  11. if (!empty ($_GET['file'])) {
  12.       header("Content-Disposition: attachment; filename=".$_GET['file']."");  
  13.           echo $file;
  14. }
  15. ?>
  16.  


-----
Еще вечера сегодня было завтра.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB