Учёт количества просмотров картинок на сайте

govnoproger.ru > php > Учёт количества просмотров картинок на сайте

Предположим вам нужно учесть количество просмотров изображений.
И вот облом — в вашем движке нету такой функции.

Это довольно легко реализовать с помощью php и htaccess.
В целом движок не имеет значения.

На всякий случай напомню про сервис проверки preg_match и preg_match_all.

Итак логика проста:
Учитываем только те картинки — которые в папке uploads.
Когда кто-то обращается к картинке — переписываем его на скрипт.
У нас есть скрипт он называется imageview.php, на него мы как раз-таки и будем переписывать.

Вот собственно пример:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /uploads/
RewriteRule (.+\.(jpe?g|gif|png))$ ../imageview.php?fname=$1 [NC]
</IfModule>

Как видите установил базовую директорию и тупо переписал все картинки.

Код в файле imageview.php:

$fname=$_GET['fname'];
print_r($fname);

Дальше стандартный код — подключились к базе, создали запись если нету, увеличили счётчик просмотра.
Этот пример абсолютно рабочий.

Есть проблема, наша CMS автоматически создаёт превью изображения (маленькие картинки).
Зачем нам учитывать просмотры превью?
Конечно-же можно дальше менять imageview.php, в нём проверять по имени превью это или нет…

Есть способ проще.
Обычно превью имеют вид имяфайла-160×160.jpg.
В вордпрессе это именно так.

Нам нужно проверять конец имени файла на наличие -числоxчисло.

Меняем наш htaccess файл:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /uploads/
RewriteCond %{REQUEST_FILENAME} !^(.+)-\d+x\d+\.(jpe?g|gif|png) [NC]
RewriteRule (.+\.(jpe?g|gif|png))$ ../imageview.php?fname=$1 [NC]
</IfModule>

Пояснение изменения.

Дело в том что в регулярных выражениях нет чистого отрицания, нужного в данном случае нам.
Есть негативный просмотр вперёд, но из-за того что мы не знаем части имени файла — он нам не поможет.
Что остаётся сделать?
Правильно, инвертировать шаблон.
Так-как rewriteRule не поддерживает инверсию, поэтому мы делаем через rewriteCond, где символ «!» и есть инвертирование.

Итак если перевести на нормальный язык, то это звучит так: Если в имени файла не содержится наш шаблон — то собственно делаем rewriteRule.

Если не понимаете, то я могу решить эту проблему, скажем рублей этак за 500.

Рекомендую:

9.9.2011 | последняя редакция: 09.09.2011 |