Сбор статистики на PHP. Получение данных о посетителе на PHP
Статистические сведения о посетителях сайта приносят не мало пользы. По статистике можно подогнать дизайн сайта в соответствии с разрешением большинства посетителей, подогнать дизайн к браузеру, на котором приходят большая часть посетителей да и просто интересно, кто заглядывает к вам на сайт, из под какой OC, а может это поисковый робот яндекса или гугла? Хотя некоторые системы слежения за посетителями бывают черезвычайно сложными, но с помощью довольно простой системы можно получить любопытные сведения о посетителях сайта. Я покажу как сделать с виду простой журнал посещений сайта с помощью PHP и cookies (MySQL не требуется). К тому же мой пример можно легко расширить.
Для того, что бы система работала, нужно скрипт статистики встроить в каждую страницу. Ну или в те страницы, статистику посещений которых вы хотите увидеть. Наш скрипт будет записывать следующие данные:
· Браузер + OC (HTTP_USER_AGENT)
· IP адрес (REMOTE_ADDR)
· Хост (REMOTE_HOST)
· Страницу-рефферер (HTTP_REFERER)
· Время визита (date("d.m.Y H:i:s"))
· Запрашиваемый адрес (REQUEST_URI)
Даже эти данные, я думаю, будут весьма интересны веб-мастерам. Итак, начнем. Скрипт будет называться sniffer.php. Я приведу текст всего скрипта и дополню это обильными комментариями:
php
//sniffer.php
//защита от непосредственного запуска
//скрипта кем то посторонним
If ( eregi ( "sniffer.php" , $PHP_SELF )) {
Header ( "Location: index.php" );
Extract ( $HTTP_GET_VARS );
Extract ( $HTTP_POST_VARS );
Extract ( $HTTP_COOKIE_VARS );
Extract ( $HTTP_SERVER_VARS );
//этот фрагмент кода был позаимствован
$fileName = "stat.txt" ; //имя файла со статистикой
$maxVisitors = 30 ; //количество записей, отображаемых
//при просмотре статистики
$cookieName = "visitorOfMySite" ; //имя куки
$cookieValue = "1" ; //значение куки
$timeLimit = 86400 ; //срок в секундах, который должен
//пройти с момента последнего посещения сайта, что бы
//информация о посетителе записалась повторно. Это
//значение равно 1 дню, т.е. один и тот же посетитель
//записывается в статистику раз в одни сутки. Если
//эту переменную приравнять к нулю, то будут учитываться
//все посещения одного и того же посетителя
//статистики
$headerColor = "#808080" ;
$headerFontColor = "#FFFFFF" ;
$fontFace = "Arial, Times New Roman, Verdana" ;
$fontSize = "1" ;
$tableColor = "#000000" ;
$rowColor = "#CECECE" ;
$fontColor = "#0000A0" ;
$textFontColor = "#000000" ;
//все переменные подготовлены.
//Функция записи данных о посетителе
Function saveUserData () {
GLOBAL $fileName , $HTTP_USER_AGENT , $REMOTE_ADDR , $REMOTE_HOST ,
$HTTP_REFERER , $REQUES_URI ;
$curTime = date ( "d.m.Y @ H:i:s" ); //текущее время и дата
//подготавливаю данные для записи
If (empty( $HTTP_USER_AGENT )) { $HTTP_USER_AGENT = "Unkwnown" ;}
If (empty( $REMOTE_ADDR )) { $REMOTE_ADDR = "Not Resolved" ;}
If (empty( $REMOTE_HOST )) { $REMOTE_HOST = "Unknown" ;}
If (empty( $HTTP_REFERER )) { $HTTP_REFERER = "No Referer" ;}
If (empty( $REQUEST_URI )) { $REQUEST_URI = "Unknown" ;}
$data_ = $HTTP_USER_AGENT . "::" . $REMOTE_ADDR . "::" . $REMOTE_HOST . "::
" . $HTTP_REFERER . "::" . $REQUEST_URI . "::" . $curTime . "\r\n" ;
//разделителем будут два ":"
If ( is_writeable ( $fileName )) :
$fp = fopen ( $fileName , "a" );
Fputs ( $fp , $data_ );
Fclose ( $fp );
//функция записи готова. Теперь нужно написать
// функцию вывода данных из файла статистики
Function showStat () {
GLOBAL $headerColor , $headerFontColor , $fontFace , $fontSize , $tableColor ,
$fileName , $maxVisitors , $rowColor , $fontColor , $textFontColor ;
// вывожу таблицу
$count = sizeOf ( $fbase );
Echo "" ;
Echo
"
Всего
посещений
: $count
"
;
Echo "
<
Font face=\" $fontFace\ " color=\" $headerFontColor\ " Size=\" $fontSize\ "> Браузер
| Size=\" $fontSize\ ">IP |
Size=\" $fontSize\ "> Хост |
Size=\" $fontSize\ "> Ссылка |
Size=\" $fontSize\ "> Страница |
Size=\" $fontSize\ "> Время визита | |||||||||||||||||||||||||||||||||||||||||||||
<
Size=\" $fontSize\ ">$strr
| <
Font face=\" $fontFace\ " color=\" $fontColor\ " Size=\" $fontSize\ ">$strr
| <
Font face=\" $fontFace\ " color=\" $fontColor\ " Size=\" $fontSize\ ">$strr
| <
Font face=\" $fontFace\ " color=\" $fontColor\ " Size=\" $fontSize\ ">$strr
| <
Font face=\" $fontFace\ " color=\" $fontColor\ " Size=\" $fontSize\ ">$strr
| <
Font face=\" $fontFace\ " color=\" $fontColor\ " Size=\" $fontSize\ ">$strr |
Назад |
Column Name | Data Type | Length | Null or Not Null | Primary key? | Auto Increment |
ID | INT | 1 | Not Null | Yes | Yes |
FirstName | Varchar | 50 | Not Null | No | No |
LastName | Varchar | 50 | Not Null | No | No |
Varchar | 50 | Not Null | No | No | |
PhoneNumber | Varchar | 15 | Not Null | No | No |
Таблица базы данных состоит из столбцов и строк, как в Excel . Первый столбец позволяет идентифицировать данные по имени. Далее идет колонка Data types (тип данных ), которая указывает нам на тип данных, содержащихся в колонке. В поле Length (Длина ) указывается максимальный объем памяти (хранилища ) для столбца таблицы. Мы используем переменные, которые дают больше гибкости. Другими словами, если длина ФИО меньше 50 символов, то будет занята лишь часть отведенного места.
И среди данных персонала не может быть пустых значений (null, empty ). Первая строка выделена желтым цветом, потому что столбец ID – наш основной ключ. Основной ключ в базе данных гарантирует, что каждая запись будет уникальной. К этой колонке также применен автоинкремент, а это значит, что каждой записи в нашей базе данных будет присваиваться уникальный номер автоматически.
Вносим представителей персонала в таблицу
Как только разберетесь с таблицей, начните заполнять ее данными. 6 записей вполне достаточно, чтобы закрепить в уме процедуру. Ниже предлагаю вам собственный пример:
Column ID | FirstName | LastName | PhoneNumber | |
2 | Ryan | Butler | [email protected] | 417-854-8547 |
3 | Brent | Callahan | [email protected] | 417-854-6587 |
Разработка формы
Чтобы создать форму поиска по сайту через Google , откройте любой подходящий текстовый редактор. Я рекомендую воспользоваться бесплатным PSPad . Вы можете использовать любой текстовый редактор, где предусмотрена подсветка синтаксиса. Это в значительной степени облегчит процесс написания и отладки PHP-кода . Создавая страницу для формы поиска, не забудьте сохранить ее в формате .php , иначе PHP-код не будет обрабатываться должным образом. Как только сохраните документ, скопируйте в него следующую разметку:
Детальный поиск контактов
Вы можете искать по имени или фамилии
Если вы знакомы с языком HTML , то тут вам все должно быть понятно как минимум до открывающего тега form . Внутри этого тега находится важнейший элемент всего кода – атрибут action . В качестве действия нашей формы мы указали название нашего файла, а затем применили к нему строку запроса “go ”.
Проверка на соответствие критерию
Когда пользователь вводит имя или фамилию, а затем нажимает кнопку подтверждения, форма передает данные самой себе и добавляет в конце строку запроса “go ”. На данном этапе мы проверяем наличие строки запроса go . Если результат положительный, выводим результаты поиска.
До вывода запрашиваемых результатов нам нужно перепроверить: (1) была ли подтверждена форма, (2) содержит ли строка запроса значение go, (3) был ли поисковой запрос введен в нижнем или верхнем регистре? Если ни одна из проверок не дает положительного результата (true ), то от нас не требуется выполнять какие-либо действия.
Для начала добавим небольшой блок кода PHP поиск по сайту после закрывающего тега :