|
|
|
| Можно ли в принципе написать PHP-сценарий, который будет отдавать клиенту html-код <img src="mypic.php">, где mypic.php будет представлять из себя JPEG-файл, "на лету" "слизанный" с чужого удалённого сервера? | |
|
|
|
|
|
|
|
для: Абырвалг
(01.03.2011 в 23:07)
| | Можно, собственно, это скрипт из трех строк, нужно только отправить HTTP-заголовки, что это JPEG, по желанию отправить размер файла и вывалить содержимое при помощи file_get_contents(), которому в качестве аргумента подставить сетевой адрес изображения.
PS Правда, администратор может заметить большое количество запросов (а в таком простейшем варианте будет видно, что это PHP орудует, так как USER_AGENT останется не подделанным) и может забанить IP-адрес сервера, на котором расположен такой скрипт. Обычно все-таки перетаскивают изображение и используют из кэша, чтобы не гневить владельцев без надобности - собственно, не вдаваясь в этические проблемы, это лишняя бесплатная нагрузка для сервера, с которого изображения тянутся. | |
|
|
|
|
|
|
|
для: 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 картинок пользователю. | |
|
|
|
|
|
|
|
для: Абырвалг
(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 Кстати, если используется бесплатный хостинг, скрипт скорее всего не сработает - они практически все поголовно запрещают такие удаленные обращения. Если это свой коммерческий хостинг - лучше перетащить со временем все изображения к себе - быстрее будет и надежнее (не нужно будет опасаться, что сторонний сервер валяется). | |
|
|
|
|
|
|
|
для: cheops
(02.03.2011 в 00:15)
| | Я так понимаю что задача сводится к тому:
Скорее всего это список названий картинок (имён )
выбранное имя передаётся в обработчик
Но тогда должен быть массив или другая база д. , где названию картинки соответствовала бы ссылка на реально загруженную картинку на хостинг т.е.
mypic.jpg ==> http://depositfiles.com/files/7ki1on9un
|
скрипт ее должен закачать и потом отдать header-ом | |
|
|
|
|
|
|
|
для: Косорылый
(02.03.2011 в 03:35)
| | Да именно так.
Имеются много ASCII-файлов на своём сервере. У каждого - уникальное имя.
В каждом - куча строк типа: порядковый номер -- URL картинки.
Форма методом post передает php-сценарию те самые имя файла и номер. Соответствующий файл php-сценарием открывается, читается, соответствующий URL определяется.
С этим я более-менее разобрался - логику работы PHP с собственной файловой системой я худо-бедно разобрал.
А вот далее: картинку с установленного URL надо "стянуть", переформировать в "свою" и отдать клиенту. И об этом я и спрашивал. | |
|
|
|
|
|
|
|
для: Абырвалг
(02.03.2011 в 11:33)
| | Можно их передавать через GET-параметры, т.е.
<img src="mypic.php?file=url.txt&id=356">
|
А значения в <img> принимать через $_GET['file'] и $_GET['id']. Только с именем файла следует быть осторожным, лучше его прогнать через basename(), подставить путь и проверить на существование, перед использованием. | |
|
|
|
|
|
|
|
для: 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 (последняя просмотренная). | |
|
|
|
|
|
|
|
для: Абырвалг
(02.03.2011 в 11:49)
| | Тогда, да, вместо $_GET, используйте $_POST - этот массив будет виден внутри файла до тех пор, пока вы указываете к скрипту mypic.php относительный путь (а не абсолютный сетевой). Только если вам потребуется вывести больше одного изображения, в POST-данных координаты для каждого из них придется заготавливать отдельно. | |
|
|
|
|
|
|
|
для: Абырвалг
(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:07)
| | Ну если нет на том сервере защиты от Hotlinking то реально
Сорри не заметил что скриптом формировать.... | |
|
|
|