Библиотека программиста

18.04.2024 - Анализ посещаемости сайта рефералами

Реферал - это url, с которого посетитель приходит на ваш сайт. К примеру, на странице http://www.site.com/links.html есть ссылка на ваш сайт. Если человек нажмет на нее, то он попадет на ваш сайт. Тогда url http://www.site.com/links.html будет вашим рефералом. Каждому владельцу ресурса не будет лишним знать, откуда именно заходят посетители на его сайт. Для тех, кому интересно решение данной проблемы (задачи) с помощью PHP, и посвящена данная статья.




Не спорю, что у любой уважающей себя CMS (content management system, система управления содержанием) есть модули (боты), которые отвечают за сбор статистики. Для тех же, у кого на сайте не стоит CMS, есть возможность попрактиковаться в написании и конфигурировании собственного мини-модуля статистики.

Его можно реализовать в небольшом скрипте, который будет отслеживать нажатия на ссылки, записывать их URL'ы в базу данных (в нашем примере это MySQL) и генерировать статистику в виде графика. Да и поможет разобраться, как это все работает на самом деле, не копаясь в модулях сторонних разработчиков.

Нам потребуется три файла:

* referer.sql (запрос к БД на создание таблицы, где будет храниться статистика);
* referer.php (сам скрипт);
* viewreferer.php (скрипт для просмотра статистики).

Для создания таблицы referer необходимо выполнить запрос referer.sql. Вот его содержание:

Код
CREATE TABLE referer (
url varchar(100) NOT NULL,
hits int(10) DEFAULT '0' NOT NULL,
PRIMARY KEY (url)
);


Теперь займемся файлом referer.php. Зададим значения переменным:

PHP - Код
$hostname "localhost"// предоставляется вашим хостером. 
//В большинстве случаев это - localhost (иногда бывает 127.0.0.1)
$username "your-username"// имя пользователя - ваш 
//логин для подключения к базе данных
$password "your-password"// вы должны получить его 
//у своего хостинг-провайдера
$userstable "referer"// таблица, в которой будут 
//храниться результаты работы нашего скрипта
$dbName "your-db-name"// имя БД, в которой 
//содержится таблица referer

.
.
.
.
.
.
.
.
.
.
.
.
В переменную $ref заносим информацию о ссылке-реферере:

PHP - Код
$ref strtolower($HTTP_REFERER);

.
.
С помощью функции strtolower переводим значение переменной $ref в нижний регистр. Это делается для того, чтобы ссылки типа www.site.com, www.Site.com или WWW.SITE.COM были одинакового регистра.

Если переменная $ref не пустая,

PHP - Код
if(!empty($ref)){

.
.
то подключаемся к БД:

PHP - Код
mysql_connect($hostname,$username$password) or die(mysql_error());
mysql_select_db("$dbName") or die(mysql_error());


Производим выборку из столбца url, значение которого совпадает с $ref

PHP - Код
$query "select * from $userstable where url = '$ref'";


Переменная $rows содержит количество совпадений

PHP - Код
$result mysql_query($query);
$rows mysql_num_rows($result);

.
.
.
Если же не найдено ни одной записи (т.е c такого url'a еще не было рефералов)

PHP - Код
if ($rows == 0){


устанавливаем значение переменной $hits в "1"

PHP - Код
$hits "1";

.
.
А далее просто выполняем вставку url'а и переменной $hits в нашу таблицу (referer):

PHP - Код
$query1 " into $userstable (url,hits) values('$ref','$hits')";


Выполняем запрос:

PHP - Код
mysql_query($query1);
}

.
.
.
Если же были найдены записи по данному url (т.е c этого url'a уже заходили рефералы),

PHP - Код
else {
$hitquery "select hits from $userstable where url = '$ref'";
$result2 mysql_query($hitquery);
$row mysql_fetch_array($result2);
$hits $row["hits"];


Инкрементируем значение переменной $hits (увеличиваем на "1")

PHP - Код
$query2 "update $userstable set hits = hits+1 where url = '$ref'";
mysql_query($query2);>
}
}

.
.
.
.
.
.
В ту страницу сайта, для которой необходима статистика по рефералам (как правило - это главная страница, index.php), необходимо вставить ссылку на скрипт referer.php. Предполагается, что файлы referer.php и index.php находятся в одной папке.

PHP - Код
include("referer.php");

.
.
.
На этом и заканчивается содержимое скрипта referer.php. Но, как я написал выше, есть также и графическая статистика. Это будет наш третий файл - viewreferer.php.

Задаем переменные для подключения к БД:

PHP - Код
$hostname "localhost";
$username "your-username";
$password "your-password";
$userstable "referer";
$dbName "your-db-name";

.
.
.
.
.
.
Так как этот скрипт генерирует таблицу с графиком, то есть смысл для определенных диапазонов значений хитов назначить определенные цвета.
PHP - Код
$color10 "#FFFF00";
$color20 "#FF0000";
$color50 "#008000";
$color1k "#0000FF";
$color2k "#0000A0";
$color5k "#000040";


Опять соединяемся с БД:
PHP - Код
mysql_connect($hostname$username,$password) or die(mysql_error());
mysql_select_db("$dbName") or die(mysql_error());


Делаем выборку из БД и упорядочиваем ее по убыванию (desc) количества хитов (столбец hits).
PHP - Код
$query "select * from $userstable order by hits desc";
$result mysql_query($query);


Подсчитываем количество строк с уникальными рефералами (это попросту число строк в нашей таблице referer).
PHP - Код
$number mysql_num_rows($result) or die (mysql_error());
$i 0;

.
.
.
Если же не найдено ни одной записи (таблица пуста), то выводим сообщение:
PHP - Код
if ($number == 0) {
echo 
"<center><p><b>Сведений о рефералах не обнаружено!</b></center>";
}

Если же рефералы есть:
elseif (
$number >= 1) {
while (
$i $number){
$row mysql_fetch_array($result);
$hits $row["hits"];
$ref $row["url"];


Выбираем цвет для текущего значения hits:
PHP - Код
if ($hits <10){
$color "$color10";
}
elseif ((
$hits >= 10 )
and (
$hits 20)){
$color "$color20";
}
elseif ((
$hits >= 20 )
and (
$hits 50)){
$color "$color50";
}
elseif ((
$hits >= 50 )
and (
$hits 100)){
$color "$color1k";
}
elseif ((
$hits >= 100 )
and (
$hits 200)){
$color "$color2k";
}
elseif (
$hits >= 200){
$color "$color5k";
}


Табличка с графиком строится как результат MySQL-запроса. В первой колонке содержится название url'а, а во второй - количество хитов, а в третей - цветная полоса.
PHP - Код
echo "<div align="left">";
echo 
"<table cols=3 border="0" width="100%">
<tr><td align=left width="
400"><b>
<a href="
$ref">$ref</a></b></td>";
echo 
"<td align=right width="60"><b>$hits</b></td>";
echo 
"<td align=left width="$hits" bgcolor="$color"> </td></tr>";
$i++;
echo 
"</table>n";
}
}

.
.
.
.
.
.
.
.
.
.
.
Итак, все готово! Теперь можно периодически вызывать скрипт viewreferer.php и смотреть графическую статистику переходов на ваш сайт.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=69