Повесив на свой сайт счётчики я вдруг обнаружил, что не одна из организаций, мне их предоставивших, не позволяет посмотреть, по какому запросу в Яндексе (и других поисковиках) тот или иной человек пришёл на мой сайт. По крайней мере, никто не предоставляет такую услугу бесплатно.
Тогда я обиделся на них за то, что мне, в таком случае, придётся самому писать себе небольшой логгер. Задачка - легчайшая, потому и ломало её делать. Однако хозяева всяких сайтов-счётчиков имеют наглость брать за это деньги, вселяя в людей веру, что свои деньги бурт не зря. Что ж, развеем их надежды нас поиметь!
Страница, с которой пришли
Итак, получить страницу, с которой пользователь попал на эту, - легче лёгкого. Её адрес по умолчанию передаётся в заголовке 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); // дальше - понятно, пишем всё это в файл
Но и эта функция далека от совершенства! Дело в том, что русских символов вы в этих урлах не увидите - их будут заменять их 16-ричные представления (предваряемые знаком %). Поэтому неплохо бы, чтобы скрипт самостоятельно приводил их к удобочитаемому виду: заменял всякие
Уже по логам этого скрипта можно судить, откуда пришёл посетитель, по каким страничкам он прошёл и на какой страничке покинул сайт. Да, безусловно, можно было это сделать и сессиями - но нам лень. А так - 2 минуты, и можно наслаждаться! :)
Ты узнаешь её из тысячи
Это - основа. Дальше можно много чего придумать: например, из строк, содержащих http://www.yandex.ru/yandsearch, вырезать ту часть, в которой, собственно, содержится запрос, и записывать в какой-нибудь файл типа yandex.log. В общем, на что фантазии хватит - всё можно забабахать!