Рецепт №50. Из книги «128 рецептов php»
Перейти к оглавлению
Чтобы определить, читали отправленное письмо или нет, можно воспользоваться небольшой хитростью – отправить в письме картинку, которая будут подгружаться с удаленного сервера, и при обращении к этой картинке, можно реализовать вызов счетчика количества просмотров.
Для того чтобы при обращении к картинке на сервере выполнялся скрипт можно воспользоваться apache модулем mod_rewrite. Он позволит реализовать редирект с картинки на скрипт. Для этого достаточно добавить в корень сайта файл .htaccess с кодом:
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ([[:alnum:]]+).png$ img.php?em=$1 [L] </IfModule>
Таким образом, при обращении к картинке с адресом:
<img src="http://site.ru/dGVzdEBtYWlsLnJ1.png"/>
будет вызван скрипт http://site.ru/img.php?em=dGVzdEBtYWlsLnJ1
Как вы уже наверняка обратили внимание, помимо вызова самого скрипта, происходит передача GET параметра em – имя картинки. Это сделано специально, с помощью этого параметра можно передавать любую необходимую информацию, например e-mail адрес получателя письма. В данном примере это закодированный, с помощью base64, e-mail получателя.
Остается только написать скрипт, который будет обрабатывать обращения и возвращать в ответ картинку и записывать статистику обращений:
// генерируем картинку и отдаем ее // создаем холст 1 на 1 пиксель $image = imagecreatetruecolor(1,1); // делаем его белым imagefill($image, 0, 0, 0xFFFFFF); // задаем заголовок для вывода картинки header('Content-type: image/png'); // выводим картинку imagepng($image); // очищаем память от картинки imagedestroy($image); // проверяем наличие GET параметра if(isset($_GET['em'])){ // получили email пользователя, // который открыл письмо // разкодирем данные $email = base64_decode($_GET['em']); // тут реализуем запись статистики // в файл или базу данных }
В рецепте был использован код для генерации картинки, об этом подробнее написано в V части сборника рецептов(«Графика»). Также была использована ранее не описанная функция base64_decode, она осуществляет декодирование данных закодированных с помощью функции base64_encode в формат base64.