Небольшое вступление. Что такое реферал (англ. вариант - referer)? Реферал - это 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. Зададим значения переменным: $hostname = "localhost"; // предоставляется вашим хостером. В большинстве случаев это - localhost (иногда бывает 127.0.0.1) $username = "your-username"; // имя пользователя - ваш логин для подключения к базе данных $password = "your-password"; // вы должны получить его у своего хостинг-провайдера $userstable = "referer"; // таблица, в которой будут храниться результаты работы нашего скрипта $dbname = "your-db-name"; // имя БД, в которой содержится таблица referer В переменную $ref заносим информацию о ссылке-реферере: $ref = strtolower($http_referer); С помощью функции strtolower переводим значение переменной $ref в нижний регистр. Это делается для того, чтобы ссылки типа www.site.com, www.site.com или www.site.com были одинакового регистра. Если переменная $ref не пустая, if(!empty($ref)){ то подключаемся к БД: mysql_connect($hostname,$username, $password) or die(mysql_error()); mysql_select_db("$dbname") or die(mysql_error()); Производим выборку из столбца url, значение которого совпадает с $ref $query = "select * from $userstable where url = '$ref'"; Переменная $rows содержит количество совпадений $result = mysql_query($query); $rows = mysql_num_rows($result); Если же не найдено ни одной записи (т.е c такого url'a еще не было рефералов) if ($rows == 0){ устанавливаем значение переменной $hits в "1" $hits = "1"; А далее просто выполняем вставку url'а и переменной $hits в нашу таблицу (referer): $query1 = "insert into $userstable (url,hits) values('$ref','$hits')"; Выполняем запрос: mysql_query($query1); } Если же были найдены записи по данному url (т.е c этого url'a уже заходили рефералы), else { $hitquery = "select hits from $userstable where url = '$ref'"; $result2 = mysql_query($hitquery); $row = mysql_fetch_array($result2); $hits = $row["hits"]; Инкрементируем значение переменной $hits (увеличиваем на "1") $query2 = "update $userstable set hits = hits+1 where url = '$ref'"; mysql_query($query2);> } } В ту страницу сайта, для которой необходима статистика по рефералам (как правило - это главная страница, index.php), необходимо вставить ссылку на скрипт referer.php. Предполагается, что файлы referer.php и index.php находятся в одной папке. include("referer.php"); На этом и заканчивается содержимое скрипта referer.php. Но, как я написал выше, есть также и графическая статистика. Это будет наш третий файл - viewreferer.php. Задаем переменные для подключения к БД: $hostname = "localhost"; $username = "your-username"; $password = "your-password"; $userstable = "referer"; $dbname = "your-db-name"; Так как этот скрипт генерирует таблицу с графиком, то есть смысл для определенных диапазонов значений хитов назначить определенные цвета. $color10 = "#ffff00"; $color20 = "#ff0000"; $color50 = "#008000"; $color1k = "#0000ff"; $color2k = "#0000a0"; $color5k = "#000040"; Опять соединяемся с БД: mysql_connect($hostname, $username,$password) or die(mysql_error()); mysql_select_db("$dbname") or die(mysql_error()); Делаем выборку из БД и упорядочиваем ее по убыванию (desc) количества хитов (столбец hits). $query = "select * from $userstable order by hits desc"; $result = mysql_query($query); Подсчитываем количество строк с уникальными рефералами (это попросту число строк в нашей таблице referer). $number = mysql_num_rows($result) or die (mysql_error()); $i = 0; Если же не найдено ни одной записи (таблица пуста), то выводим сообщение: 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: 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'а, а во второй - количество хитов, а в третей - цветная полоса. 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 и смотреть графическую статистику переходов на ваш сайт.
|