Народ регулярно спрашивает, как сделано вот это, как будто это что-то сложное. На самом деле это на редкость примитивно, пардон, до гениального просто. Но так как спрашивают регулярно... работает, в общем, это все примерно так: Поисковики - такие же сайты, как и все остальные (сюрприз, да), поэтому если к вам зашли с поисковика, адрес, с которого зашли, тобишь реферер, легко отслеживается. При этом текст запроса уже содержится в УРЛЕ, с которого к вам зашли, например: http://yandex.ru/yandsearch?text=%EF%EE%E8%F1%EA+%ED%E0+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)): И если пришли, то: $url2=urldecode($url); # just in case if (stristr($url, 'yandpage')) {$url2=convert_cyr_string ($url2, k, w);} # если пришли с яндекса, то перекодируем УРЛ (он почему-то всегда в КОИ). eregi ($sw.'([^&]*)', $url2.'&', $url2); $url2=$url2[1]; # именно в этих 2х строчках мы и вычленяем запрос, то есть переменная $url2 теперь содержит текст запроса в человеческом виде. И все, собственно. Дальше все очень просто. У меня, например, это все пришется в простой файл вот в таком виде: $fullfile='[ <small><b>'.$engine.'</b></small> ] :: <a href='.$HTTP_REFERER.'>'.$url2.'</a> :: попал <a href='.$REQUEST_URI.'>сюда</a> <small> [ '.date('d.m.Y H:i').' ]</small><br>
'; А выглядит все вот так: spectator.ru/yandex Дальше не забыть поставить: else: .... и тут обработчик тех реферов, которые были НЕ с поисковых систем, после чего, конечно же --- endif; ?> ...кончается скрипт... И после недолгих мучений скрипт смотрится примерно вот так. Как видите, все просто до идиотизма. |