Запретить открытие изображения в браузере напрямую - PullRequest
1 голос
/ 25 июля 2011

У меня есть папка с картинками 1.jpg, 2.jpg, 3.jpg ... Есть ли способ запретить пользователю вводить URL-адрес, например www.example.com/pictures/3.jpg, прямо в браузер изагрузка этого изображения?

Изображение должно быть загружено, если веб-html вызывает его (image

Возможно ли это сделать?Использование IIS URL Rewrite или другой метод?

Я использую IIS7.5.Моя цель - не дать пользователям увидеть следующее изображение ... Я знаю, я мог бы закодировать имена, но у меня есть какая-то старая база данных с 1-1000, и я бы как-то хотел, чтобы только пользователи не просматривали, используя URLбез реферера ... Потому что каждый день я передаю одну фотографию, и я не хочу, чтобы они находили остальную часть ...

Возможно ли это вообще?

1 Ответ

1 голос
/ 25 июля 2011

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

Если бы я был вами, я бы переместил все ваши изображения за пределы вашего веб-каталога (или, желательно, просто полностью заблокировал папку pictures), а затем создал бы скрипт php, который называется image.php:

<?php

define('NUM_IMAGES', 1000);

header('Content-Type: image/png');

$image = imagecreatefromjpeg('pictures/'.((int)(time()/86400)%NUM_IMAGES+1).'.jpg');
imagepng($image);

?>

Сценарий, приведенный выше, выведет изображение в браузер пользователя, которое будет меняться один раз в день на следующее изображение в последовательности, и вы можете использовать его следующим образом: <img src="image.php" />

Тогда, поскольку ваша папка с изображениями заблокирована, никто не сможет увидеть другое изображение. Тогда вы все равно можете напрямую запросить image.php, но они увидят только изображение дня.

Если вы не хотите автоматически поворачиваться один раз в день и хотите ручное управление тем, какое изображение оно показывает, вы также можете просто заменить '.((int)(time()/86400)%1000+1).' номером изображения, которое вы хотите отобразить.

Если вы хотите, чтобы он вращался автоматически, но хотите контролировать время, когда он обновляется, вы можете добавить смещение к time(), например: ((time()+$offset)/86400)

...