Forum Webscript.Ru
Программирование => PHP => Тема начата: a@mail.dux.ru от 18 Сентября 2003, 21:46:21
-
Подскажите пожалйста!
как сделать так, что бы картинки из директории /images можно было бы смотреть только переходя на страницы на которых установлен html код
Например
и нельзя бы было просто набрать Мой сайт/images/2660.gif
могу переместить картинки куда угодно (в какую угодно директорию)
-
предлагаю такой вариант:
1. картинки отдаешь скриптом
2. в скриптах используешь сессии.
Если пользователь зашел на страницу на которой
разрешен показ картинки, в сессию записывается этот факт (и время).
При вызове скрипта, отдающего картинку скрипт проверяет сессию пользовтаеля,
был ли он на такой странице за последние пару минут - если был, то выводим картинку.
Вроде выглядит работоспособным, правда к src картинки нужно SID дописывать
Можно наверное еще и через referer - но это подделать проще.
-
я не понял пункт 1. оттого пока не понятен смысл остального.
но полагаю в описном тобою варианте все равно возможен просмотр картинки прямым набором ее адреса в адресной строке браузера.
вот так например: Мой сайт/images/2660.gif
а мне хотелось бы что бы никак кроме как через php-шную страницу картинки из этой директории посмотреть было бы нельзя
Но все равно спасибо. Хотяя я может не понял тебя?? :(
-
Сделай примерно так:
создай файлик или табличку в мускуле в которой будет таблица соотв. типа:
ksjdfhsdhf3542; image1.jpg
skks52352shskj; image2.jpg
далее передаешь в скрипт image.php непонятные параметры
index.html:

image.php:
#тут выдергиваешь имя файла соотв. переданной переменной(в зависимости от метода хранения таблицы соответствия)
Header("Content-type: image/jpeg");
$fd=fopen($file, "r")
$content= fread($fd, filesize($file));
fclose($fd);
echo $content;
?>
что-то типа того...
-
Shaitan спасибо.
Но как отобразится это на загрузку сервера?
Ясно же что этот вариант нагрузочнее для сервера чем просто вызвать картинку обычным скриптом. Типа:
Или я не прав?
А вообще ты накрутил. если так делать, то просто надо засунуть картинки выше корня сайта. и вызывать их тегом 
а дальше вызывать как ты пишешь. Экономия получается (на базе данных или таблице соответствия).
Но все равно спасибо :)
-
а что помешает мне ввести
http://твой_сайт.ru/images.php?image.jpeg
и посмотреть картинку
ЗЫ
[p]readfile[/p]
-
a@mail.dux.ru
в моем сообщении смысл пункта 1 уже описан выше:
/// получаем filename
header("Content-Type: image/jpeg");
readfile($filename);
?>
-
а вот цитата из мануала по Апачу 1.3, часть URL Rewriting Guide
может поможет?
Blocked Inline-Images
Description:
Assume we have under http://www.quux-corp.de/~quux/ some pages with inlined GIF graphics. These graphics are nice, so others directly incorporate them via hyperlinks to their pages. We don\'t like this practice because it adds useless traffic to our server.
Solution:
While we cannot 100% protect the images from inclusion, we can at least restrict the cases where the browser sends a HTTP Referer header.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\\.gif$ - [F]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\\.html$
RewriteRule ^inlined-in-foo\\.gif$ - [F]
-
P.S. то есть Апач проверяет, выставлена ли переменная $HTTP_REFERER, и в зависимости от этого выдает или не выдает картинку.
-
Xander
Как я понял (хоть в английском не силен) что надо изменить настройки Апача? Но я ж обычный клиент и эти действия мне недоступны.
Может что-то можно сделать с помощью .htaccess ?
-
Макс,
поясни, что это значит: 1. картинки отдаешь скриптом
? там наверное грамматическая ошибка. И мне не понятно что Точно ты имел ввиду.
Я понял это так: 1. картинки СоЗтдаешь скриптом.
Если так. то:
1) увеличиться ли нагрузка на сервер? если да, то насколько?
а в ответ на
-----------
а что помешает мне ввести
http://твой_сайт.ru/images.php?image.jpeg
и посмотреть картинку
----------
так в файле images.php я просто проверю $HTTP_REFERER и если заход не с моего сайта. то картинку не покажу
-
> поясни, что это значит: 1. картинки отдаешь скриптом
картинки ложишь в папку, недоступную по www а все адреса картинок меняешь на

в скрипте image.php проверяешь можно ли выдавать картинку скриптом и если можно - выдаешь ее ему:
//// проверка
...
header("Content-Type: image/jpeg");
readfile($filename);
?>
нагрузка увеличится. Насколько - не знаю, если это не порносайт - то не важно.
ЗЫ
если тебя устраивает надежность которую может обеспечить referer - то используй свой вариант. Или (что даже лучше ИМХО) вариант Xander-а. Его через .htaccess можно реализовать
-
Макс
спасибо. с \'1\' все понятно. вопрос с загрузкой остается, хоть и не порносайт, но картинки могут достигать 80-100 килобайт и посещаемость может быть высокая.
а вот про
------
вариант Xander-а. Его через .htaccess можно реализовать
------
Ничего не знаю. поясни, плиз. или где искать про это инфо?
-
ЛЮДИ!!!
Скажите, плиз, насколько увеличится загрузка сервера
при выводе картинки вместо обычного
таким образом:

в скрипте image.php проверяешь можно ли выдавать картинку скриптом и если можно - выдаешь ее ему:
//// проверка
...
header("Content-Type: image/jpeg");
readfile($filename);
?>
Это будет в разы или..?
-
Если никто таких тестов не проводил, то никто тебе не ответит.
Можешь посмотреть, насколько время отдачи различается:
пишешь скрипт, который будет выводить картинку.
Берешь apache benchmark и сравниваешь насколько /images/2660.gif быстрее чем image.php?img=2660.gif
-
Макс
очень смешно.
если бы я знал как это сделать, наверное, знал бы и все остальное :)
-
a@mail.dux.ru
над тобой никто не смеется...
a@mail.dux.ru
Макс
о чем собственно разговор, вы чего на DX486 работаете??? или кочичество посещений огромное???
a@mail.dux.ru
Когда это будет очень сильно нагружать сервер, тебе твой хостер сам скажет... как бы ты не пытался добиться результата, сервер будет тратить процессорное время, на выполнение действий по контролю HTTP_REFERER....
Макс:
недоступную по www
a@mail.dux.ru:
Но я ж обычный клиент
Что-то мне подсказывает, что у товарища нет доступа к другим папкам, которые недоступны из ввв... (могу ошибаться)
a@mail.dux.ru:
Это будет в разы или..?
нет
-
a@mail.dux.ru
что такое apache benchmark знаешь ? Вроде в последних версиях с апачем поставляется. Хотя я под винду его из инета отдельно скачивал (ab.exe)
Дока с описанием использования также есть в документации, поставляемой с апачем.
-
Макс
спасибо за совет, но для меня это слишком сложная задача. :)
Так я и весь аппачь смогу переписать, если все буду знать и уметь. А на девченок и веремени не останется :(
-
a@mail.dux.ru
девчонки, они через о пишутся.
А касательно дела - по-моему проще всего сделать через .htaccess
выясни только у хостера, включен ли у него mod_rewrite. Тогда тебе не придется ничего менять в существующем html-коде, и.т.д, и.т.п.
А то наделаешь скриптов, ссылки все перепишешь, а потом придется обратно менять.
-
Я нашел простое но своеобразное решение.
Не знаю, насколько оно надежное. Хотелось бы услышать ваше мнение:
картинка должна показываться на странице page.php
в ней ставим тег: 
содержимое файла myphoto.php :
header("Location: imaaaaaa/mypicture.jpg");
exit; ?>
смысл в том, что посетитель не знаект в какой директории находятся картинки. Не знаю, на сколько это надежно. но правая кнопка по картинке дает myphoto.php
названия картинок передаются через сессии. примерно, как и предлагал мне Макс (но без базы и таблицы соотв. они не нужны)
Ваше мнение, очень мне интересно.
Если это глупо, то просьба объясить в двух словах, почему. Спасибо.
-
Xander про девчонок спасибо :)
в .htaccess я работал только с 404 ошибкой.
Прочел в интернет описание о возможностях htaccess , но так и не понял, что надо сделать, намекни, в каком направлении искать.
Спасибо
-
a@mail.dux.ru
прочитай тред внимательно
Xander:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\\.gif$ - [F]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\\.html$
RewriteRule ^inlined-in-foo\\.gif$ - [F
-
Yukko, прочитал внимательно, как и было сказано.
Но увы ничего толком не понял. Я это еще не выучил.
Понял что это правила какие-то: что если файл запрошен не с http://www.quux-corp.de/~quux/.* - то ничего не получишь. И что скорее всего это надо в .htaccess сунуть.
Сунул. с исправлениями. выдало мне 500 ошибку. Так что пошел дальше разбираться.
-
Все хотел сказать, да недосуг было.
Надо помнить, что сейчас большое распространение получили всякие домашние файрволлы, баннерорезалки и прочая лабудень.
которая, в числе прочего, режет заодно и реферер.
Так что, честный юзера могут вполне себе остаться с носом.
JFYI
-
a@mail.dux.ru:
выдало мне 500 ошибку. Так что пошел дальше разбираться.
Надеюсь, разбираться ты пойдешь прямиком в логи апача.
-
RomikChef:
прочего, режет заодно и реферер
Norton Internet Sequrity, Zone Alarm и т.д. примерно 7% посетителей моего сайта пользуются подобным счастьем.
[off]мочил бы...[/off]
-
RomikChef , ну это ты хватанул, про "ты пойдешь прямиком в логи апача". Сначала я найду, куда они у меня пишуться. :)) Никогда к ним не обращался раннее.
-
a@mail.dux.ru
/var/log/httpd