Понедельник, 15.06.2026, 19:30
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

Как узнать, откуда пришли посетители
Повесив на свой сайт счётчики я вдруг обнаружил, что не одна из организаций, мне их предоставивших, не позволяет посмотреть, по какому запросу в Яндексе (и других поисковиках) тот или иной человек пришёл на мой сайт. По крайней мере, никто не предоставляет такую услугу бесплатно.



Тогда я обиделся на них за то, что мне, в таком случае, придётся самому писать себе небольшой логгер. Задачка - легчайшая, потому и ломало её делать. Однако хозяева всяких сайтов-счётчиков имеют наглость брать за это деньги, вселяя в людей веру, что свои деньги бурт не зря. Что ж, развеем их надежды нас поиметь!



Страница, с которой пришли



Итак, получить страницу, с которой пользователь попал на эту, - легче лёгкого. Её адрес по умолчанию передаётся в заголовке HTTP-запроса пользователя в строке "Referrer:". Получить её значение из PHP можно, вызвав соответствующую функцию следующим образом:



getenv("HTTP_REFERER")


Так что, в принципе, можно просто взять и написать отдельную функцию, которая:



$H=getenv("HTTP_REFERER"); // получает URL, с которого пришёл посетитель



$f=fopen("mylog.log",'a'); // открывает файл с логами на добавление



flock ($f,2);      // запрещает к нему доступ до тех пор,



                   //пока он не будет закрыт (на случай, если два



                   //скрипта захотят одновременно записать что-то



                   //в файл, одному из них придётся подождать)



fwrite($f,"$H\n"); // пишет в файл полученный тремя строчками выше URL



fclose($f);        // закрывает файл


Потом эту функцию можно вызывать в начале какждого php-скрипта страничек сайта.



Как узнать ip, свою судьбу и точное время



Но! Раз уж мы тут, можно немного доработать функцию, чтобы узнать IP посетителя (по нему можно примерно прикинуть область, где он находится физически), его браузер (интересно же) и страничку, куда он, собственно пришёл (звучит немного странно - мы ж и так знаем, что пришёл он на нашу страничку; но представьте, что у вас эту функция вызывается в участке заголовочного кода, который одинаково вставляется во все ваши странички, - а так, пожалуй, вы и сделаете). Также неплохо бы иметь время, когда чел пришёл к нам на сайт - потом можно будет проанализировать активность пользователей и т.п.



Так что, функция примет следующий вид:



$er_time=date("H:i:s d M Y"); // записываем текущее время в строку,



    //используя заданный формат



$U=getenv("HTTP_USER_AGENT"); // получаем данные о софте,



    //который испольует пользователь



$H=getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель



$R=getenv("REMOTE_ADDR"); // получаем IP посетителя



$W=getenv("REQUEST_URI"); // получаем относительный адрес странички,



    //которую запросил посетитель



$f=fopen("logs/visits.log",'a'); // дальше - понятно, пишем всё это в файл



flock ($f,2);



fwrite($f,"$er_time\n Br: $U\n Rf: $H\n IP: $R\n Rq: $W\n");



fclose($f);


Но и эта функция далека от совершенства! Дело в том, что русских символов вы в этих урлах не увидите - их будут заменять их 16-ричные представления (предваряемые знаком "%"). Поэтому неплохо бы, чтобы скрипт самостоятельно приводил их к удобочитаемому виду: заменял всякие



http://www.yandex.ru/yandsearch?text=%E9%EE%E6%FB%E3+%F4%F2%F3%EC%E0%ED%E5&stype=www


на



http://www.yandex.ru/yandsearch?text=йожыг+фтумане&stype=www


Делать мы это будем следующим куском кода с использованием регулярных выражений:



while (ereg('%([0-9A-F]{2})',$H)){ // пока в строке $H будет хоть одно



        //сочетание знака % и двух символов из диапазонов 0-9 и A-F



        //(шестнадцатиричные цифры)



    $val=ereg_replace('.*%([0-9A-F]{2}).*','\1',$H);



        // присваиваем $val результат замены выражения,



        //содержащего процент и два символа из означенных выше интервалов,



        //на эти самые два символа



        // короче говоря, теперь в $val у нас очередные 2 символа,



        //перед которыми в исходном выражении стоял процент



    $newval=chr(hexdec($val)); // получаем сивол с номером,



        //полученным переведением полученного в $val



        //шестнадцатиричного числа в "нормальное"



    $H=str_replace('%'.$val,$newval,$H);



        //стандартная строковая функция замены -



        //заменяет подстроку, состоящую из процента и друх символов



        //из переменной $var на символ, который эти два



        //шестнадцатиричных символа кодировали



    }// конец цикла :)


Итого:



$er_time=date("H:i:s d M Y"); // записываем текущее время в строку,



    //используя заданный формат



$U=getenv("HTTP_USER_AGENT"); // получаем данные о софте,



    //который испольует пользователь



$H=getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель



$R=getenv("REMOTE_ADDR"); // получаем IP посетителя



$W=getenv("REQUEST_URI"); // получаем относительный адрес странички,



    //которую запросил посетитель





while (ereg('%([0-9A-F]{2})',$H)){ // пока в строке $H будет хоть одно



        //сочетание знака % и двух символов из диапазонов 0-9 и A-F



        //(шестнадцатиричные цифры)



    $val=ereg_replace('.*%([0-9A-F]{2}).*','\1',$H);



        // присваиваем $val результат замены выражения,



        //содержащего процент и два символа из означенных выше интервалов,



        //на эти самые два символа



        // короче говоря, теперь в $val у нас очередные 2 символа,



        //перед которыми в исходном выражении стоял процент



    $newval=chr(hexdec($val)); // получаем сивол с номером,



        //полученным переведением полученного в $val



        //шестнадцатиричного числа в "нормальное"



    $H=str_replace('%'.$val,$newval,$H);



        //стандартная строковая функция замены -



        //заменяет подстроку, состоящую из процента и друх символов



        //из переменной $var на символ, который эти два



        //шестнадцатиричных символа кодировали



    }// конец цикла :)





$f=fopen("logs/visits.log",'a'); // дальше - понятно, пишем всё это в файл



flock ($f,2);



fwrite($f,"$er_time\n Br: $U\n Rf: $H\n IP: $R\n Rq: $W\n");



fclose($f);


Уже по логам этого скрипта можно судить, откуда пришёл посетитель, по каким страничкам он прошёл и на какой страничке покинул сайт. Да, безусловно, можно было это сделать и сессиями - но нам лень. А так - 2 минуты, и можно наслаждаться! :)



Ты узнаешь её из тысячи



Это - основа. Дальше можно много чего придумать: например, из строк, содержащих "http://www.yandex.ru/yandsearch", вырезать ту часть, в которой, собственно, содержится запрос, и записывать в какой-нибудь файл типа "yandex.log". В общем, на что фантазии хватит - всё можно забабахать!



Удачи!
Категория: php | Добавил: freeone (09.05.2007) | Автор: Александр Шмидт
Просмотров: 846 | Комментарии: 2 | Рейтинг: 0.0 |

Всего комментариев: 1
1 Hamlo  
0
Забодали уже эти пидорастические копипастеры! Вместо скрипта дерут друг у друга, не скрипт, а уже всю страницу! Я ее уже на 20 сайте вижу, БЛЯ!

Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006