Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ламерский вопрос: можно ли отдавать "чужие" картинки как свои?
 
 автор: Абырвалг   (01.03.2011 в 23:07)   письмо автору
 
 

Можно ли в принципе написать PHP-сценарий, который будет отдавать клиенту html-код <img src="mypic.php">, где mypic.php будет представлять из себя JPEG-файл, "на лету" "слизанный" с чужого удалённого сервера?

  Ответить  
 
 автор: cheops   (01.03.2011 в 23:11)   письмо автору
 
   для: Абырвалг   (01.03.2011 в 23:07)
 

Можно, собственно, это скрипт из трех строк, нужно только отправить HTTP-заголовки, что это JPEG, по желанию отправить размер файла и вывалить содержимое при помощи file_get_contents(), которому в качестве аргумента подставить сетевой адрес изображения.

PS Правда, администратор может заметить большое количество запросов (а в таком простейшем варианте будет видно, что это PHP орудует, так как USER_AGENT останется не подделанным) и может забанить IP-адрес сервера, на котором расположен такой скрипт. Обычно все-таки перетаскивают изображение и используют из кэша, чтобы не гневить владельцев без надобности - собственно, не вдаваясь в этические проблемы, это лишняя бесплатная нагрузка для сервера, с которого изображения тянутся.

  Ответить  
 
 автор: Абырвалг   (01.03.2011 в 23:49)   письмо автору
 
   для: cheops   (01.03.2011 в 23:11)
 

Спасибо за ответ. Честно говоря, ничего не понял (ламер я в PHP).

Хотелось бы решить эту задачу в следующем ракурсе:
1. Клиент жмёт на сабмит и форма методом post отдаёт серверу данные.
2. Action формы myscript.php формирует картинку mypic.php и отдаёт клиенту html-код <img src="mypic.php">
3. И так - много-много раз. В итоге у клиента в кеше его браузера остаётся всего ОДИН (последний) файл myscript.php и всего ОДНА (последняя) картинка mypic.php.

Задача именно в этом, вообще-то. Реально?

Ну и, заодно - так уж получилось, что JPEG-картинки в своё время были залиты мною на всякие разные бесплатные хранилища картинок. Именно оттуда я и хочу их "тащить" PHP-скриптом, не раскрывая URL картинок пользователю.

  Ответить  
 
 автор: cheops   (02.03.2011 в 00:15)   письмо автору
 
   для: Абырвалг   (01.03.2011 в 23:49)
 

А что находится в POST-данных? Собственно, можно начать отталкиваться от следующего скрипта mypic.php
<?php
  
// Адрес изображения
  
$url "http://www.softtime.info/dataimg/banner468x60.jpg";
  
// Качаем изображение в оперативную память
  
$content file_get_contents($url);
  
// Сообщаем, что это JPEG
  
header('Content-Type: image/jpeg');
  
// Сообщаем размер изображения
  
header("Content-length: ".strlen($content));
  
// Выводим картинку
  
echo $content;
?>

>Именно оттуда я и хочу их "тащить" PHP-скриптом, не раскрывая URL картинок пользователю.
Это будут определенные картинки или в случайном порядке? Не очень понятна роль POST-запроса, он будет формировать сетевой адрес?

PS Кстати, если используется бесплатный хостинг, скрипт скорее всего не сработает - они практически все поголовно запрещают такие удаленные обращения. Если это свой коммерческий хостинг - лучше перетащить со временем все изображения к себе - быстрее будет и надежнее (не нужно будет опасаться, что сторонний сервер валяется).

  Ответить  
 
 автор: Косорылый   (02.03.2011 в 03:35)   письмо автору
 
   для: cheops   (02.03.2011 в 00:15)
 

Я так понимаю что задача сводится к тому:
Скорее всего это список названий картинок (имён )
выбранное имя передаётся в обработчик
Но тогда должен быть массив или другая база д. , где названию картинки соответствовала бы ссылка на реально загруженную картинку на хостинг т.е.
mypic.jpg  ==> http://depositfiles.com/files/7ki1on9un

скрипт ее должен закачать и потом отдать header-ом

  Ответить  
 
 автор: Абырвалг   (02.03.2011 в 11:33)   письмо автору
 
   для: Косорылый   (02.03.2011 в 03:35)
 

Да именно так.
Имеются много ASCII-файлов на своём сервере. У каждого - уникальное имя.
В каждом - куча строк типа: порядковый номер -- URL картинки.

Форма методом post передает php-сценарию те самые имя файла и номер. Соответствующий файл php-сценарием открывается, читается, соответствующий URL определяется.
С этим я более-менее разобрался - логику работы PHP с собственной файловой системой я худо-бедно разобрал.

А вот далее: картинку с установленного URL надо "стянуть", переформировать в "свою" и отдать клиенту. И об этом я и спрашивал.

  Ответить  
 
 автор: cheops   (02.03.2011 в 11:39)   письмо автору
 
   для: Абырвалг   (02.03.2011 в 11:33)
 

Можно их передавать через GET-параметры, т.е.
<img src="mypic.php?file=url.txt&id=356">

А значения в <img> принимать через $_GET['file'] и $_GET['id']. Только с именем файла следует быть осторожным, лучше его прогнать через basename(), подставить путь и проверить на существование, перед использованием.

  Ответить  
 
 автор: Абырвалг   (02.03.2011 в 11:49)   письмо автору
 
   для: cheops   (02.03.2011 в 11:39)
 

Тогда "вся фишка" теряется.
В кеше браузера клиента останется тогда столько картинок, сколько он просмотрел:
...
mypic.php?file=url.txt&id=355
mypic.php?file=url.txt&id=356
mypic.php?file=url.txt&id=357
mypic.php?file=url.txt&id=358
...

То есть останутся ВСЕ.
А мне желательно, чтобы в кеше браузера оставался минимум, сиречь всего одна - mypic.php (последняя просмотренная).

  Ответить  
 
 автор: cheops   (02.03.2011 в 12:02)   письмо автору
 
   для: Абырвалг   (02.03.2011 в 11:49)
 

Тогда, да, вместо $_GET, используйте $_POST - этот массив будет виден внутри файла до тех пор, пока вы указываете к скрипту mypic.php относительный путь (а не абсолютный сетевой). Только если вам потребуется вывести больше одного изображения, в POST-данных координаты для каждого из них придется заготавливать отдельно.

  Ответить  
 
 автор: Trianon   (02.03.2011 в 11:41)   письмо автору
 
   для: Абырвалг   (02.03.2011 в 11:33)
 

>А вот далее: картинку с установленного URL надо "стянуть", переформировать в "свою" и отдать клиенту. И об этом я и спрашивал.

Уж коль скоро докумемнт стянут - он уже "свой".
Его можно отдать сразу, а можно записать в файл (на собственный диск) и перенаправить клиента в сторону этого файла.


Кроме того, отдавая документ, можно указать не только его тип, но и имя, под которым клиент сможет его сохранить, если захочет.

header('Content-Type: image/jpeg; name="myimg.jpg');
header('Content-Disposition: inline; filename="myimg.jpg');

  Ответить  
 
 автор: Косорылый   (01.03.2011 в 23:16)   письмо автору
 
   для: Абырвалг   (01.03.2011 в 23:07)
 

Ну если нет на том сервере защиты от Hotlinking то реально
Сорри не заметил что скриптом формировать....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования