Обнаружение доступа к изображению (или файлу любого типа) с сайта и уведомление по электронной почте

Я планирую добавить изображение логотипа в информационный бюллетень по электронной почте и использовать его в качестве изображения для отслеживания. Это изображение будет размещено на моем сайте (например, my_logo.gif) и будет указано в HTML-коде электронного письма (например, <img src="http://www.example.com/my_logo.gif" />). Я хотел бы создать скрипт в php, который отправляет мне электронное письмо при доступе/просмотре этого изображения. Это возможно? Если да, то как?

Приветствуются все идеи и предложения по завершению этого.


person ServAce85    schedule 24.11.2010    source источник


Ответы (5)


Поместите что-то вроде этого в файл .htaccess в каталоге изображений:

RewriteEngine On
RewriteRule ^(.+\.jpg)$ image.php?image=$1 [nocase]

Поместите что-то вроде этого в файл image.php в том же каталоге:

// send email here

header('Content-Type: image/jpeg');
readfile($_GET['image']);

Это всего лишь простой пример, убедитесь, что вы проверили переменную $_GET['image'], чтобы убедиться, что это изображение в том же каталоге, иначе кто-то сможет использовать этот скрипт для чтения файлов в других каталогах (image.php?image=../../../passwords) .

person deceze♦    schedule 24.11.2010
comment
Отличное решение. Теперь у меня есть вопрос после его реализации ... Может ли моя проверка быть строго добавлением этой строки в мой файл .htaccess: RewriteCond %{REQUEST_FILENAME} -f или мне все еще нужна проверка в файле image.php. Если ответ последний, как вы предлагаете мне это сделать? - person ServAce85; 16.12.2010
comment
@Serv Всегда подтверждать все пути! Любой может просто вызвать файл image.php напрямую, полностью минуя ваш RewriteCond. Я уверен, что вы можете найти решения для проверки пути на SO, но используя realpath и проверяя, не начало ли путь соответствует каталогу изображений (substr($path, 0, 13) == '/foo/bar/img/') в основном это делает. - person deceze♦; 16.12.2010

//Display image
$image=imagecreatefromjpeg('my_logo.jpg');
header('Content-Type: image/jpeg');
imagejpeg($image);

//logging or notifying stuff here
// ...

и просто дайте ссылку на этот скрипт, например <img src="script.php" />

person Napas    schedule 24.11.2010
comment
Если вы собираетесь читать jpeg и выводить тот же jpeg, вы можете пропустить долгий путь вокруг функций gd и просто выгрузить файл как есть. - person deceze♦; 24.11.2010

Вы можете перенаправить запрос в файл .jpg через .htaccess и посчитать его и т. д.

person Tobias    schedule 24.11.2010

Вы можете добиться этого, используя функцию readfile() и отправив правильные заголовки типа контента. Вы можете выполнить другой программный код до или после отправки изображения в браузер.

Если следующий программный код имеет длительное время выполнения, вам следует изучить выходные данные. управление функциями.

person K4emic    schedule 24.11.2010

Вероятно, было бы проще связать файл php и переслать или представить само изображение И подсчитывать/отслеживать/отправлять вам электронное письмо всякий раз, когда осуществляется доступ к файлу php.

person mjdth    schedule 24.11.2010