Анализ запросов
Народ регулярно спрашивает, как сделано вот это, как будто это что-то сложное. На самом деле это на редкость примитивно, пардон, до гениального просто. Но так как спрашивают регулярно... работает, в общем, это все примерно так:Поисковики — такие же сайты, как и все остальные (сюрприз, да), поэтому если к вам зашли с поисковика, адрес, с которого зашли, тобишь реферер, легко отслеживается. При этом текст запроса уже содержится в УРЛЕ, с которого к вам зашли, например: http://yandex.ru/yandsearch?text=поиск+на+php. (Правда, часто текст... как это по-русски-то?... URL-encoded, то есть выглядит вот этак: %EF%EE%E8%F1%EA, но это не проблема, у нас есть функция urldecode...).
Собственно, дальше все просто:
Сначала — находим УРЛ, с которого к вам зашли на сайт:
<?php
$url = urldecode($HTTP_REFERER);
Проверяем, а) есть ли вообще реферер, б) не является ли он внутренним, то есть с вашего же сайта (вместо spectator.ru, разумеется, в вашем случае треба подставить что-то другое).
if (($url!='') and (!stristr ($url, 'spectator.ru'))):
После чего проверяем, принадлежит ли адрес, с которого пришли, к какому-нибудь поисковику:
if ((stristr($url, 'yandpage')) or (stristr($url, 'yandsearch'))) { $sw = 'text='; $engine = 'Y'; }
if(stristr($url, 'http://search.rambler.ru/')) { $sw = 'words='; $engine = 'R'; }
if(stristr($url, 'http://sm.aport.ru/')) { $sw='r='; $engine = 'A'; }
if(stristr($url, 'google.')) { $sw='q='; $engine = 'G'; }
if(stristr($url, 'google.yahoo.com')) { $sw='p='; $engine = 'H'; }
(Добавьте поисковик(и) по вкусу сами)...
Обратите внимание, здесь мы убиваем трех зайцев: проверяем, пришли ли люди с поисковика, определяем, с какого ($engine) и устанавливаем соответствующий для данного поисковика параметр $sw. $sw — это кусок текста в УРЛЕ, после которого, собственно, и идет текст запроса, смотрите пример выше: для Яндекса текст запроса идет после «text=».
И тут, наконец, проверяем, пришли ли с поисковика...
if(isset($engine)):
И если пришли, то:
eregi ($sw.'([^&]*)', $url2.'&', $url2);$url2=urldecode($url); # just in case
if (stristr($url, 'yandpage')) {$url2=convert_cyr_string ($url2, k, w);} # если пришли с яндекса, то перекодируем УРЛ (он почему-то всегда в КОИ).
$url2=$url2[1]; # именно в этих 2х строчках мы и вычленяем запрос, то есть переменная $url2 теперь содержит текст запроса в человеческом виде.
И все, собственно. Дальше все очень просто. У меня, например, это все пришется в простой файл вот в таком виде:
$fullfile='[ <small><b>'.$engine.'</b></small> ] :: <a rel=nofollow href=http://spectator.ru/'.$HTTP_REFERER.'>'.$url2.'</a> :: попал <a rel=nofollow href=http://spectator.ru/'.$REQUEST_URI.'>сюда</a> <small> [ '.date('d.m.Y H:i').' ]</small><br>n';
А выглядит все вот так: spectator.ru/yandex
Дальше не забыть поставить:
else:
.... и тут обработчик тех реферов, которые были НЕ с поисковых систем, после чего, конечно же ---
endif; ?>
...кончается скрипт...
Слава КПСС!