вторник, 11 марта 2014 г.

Скрипт реферального хвоста РАБОЧИЙ

В последнее время в сети ищут как сделать скрипт, который будет высылать на почту вместе с заказом полезную информацию, такую как сайт с которого пришел посетитель и ключевое слово, если это была поисковая система. Представляю вам рабочую версию PHP скрипта реферальных хвостов для Google, Yandex, Rambler, Mail.ru и др.:
array('name'=>'Yandex Direct','substr'=>'"^https?\:\/\/(direct\.)?yandex\.\w+\/search"','term'=>'text'), 'Yandex Search'=>array('name'=>'Yandex Search','substr'=>'"^https?\:\/\/(www\.)?yandex\.\w+\/(.*)from=yandex\.\w+\%3byandsearch\%"','term'=>'text'), 'Yandex_Search'=>array('name'=>'Yandex_Search','substr'=>'"^https?\:\/\/(www\.)?yandex\.\w+\/yandsearch\?"','term'=>'text'), 'Mail.ru'=>array('name'=>'Mail.ru','substr'=>'"^https?\:\/\/(\w+\.)?mail.ru\/search"','term'=>'q'), 'qip.ru'=>array('name'=>'qip.ru','substr'=>'"^https?\:\/\/(\w+\.)?qip.ru\/search"','term'=>'query'), 'Rambler'=>array('name'=>'Rambler','substr'=>'"^https?\:\/\/(\w+\.)?rambler.ru\/search"','term'=>'query'), 'Facebook'=>array('name'=>'Facebook','substr'=>'"^https?\:\/\/(www\.)?facebook.com\/"'), 'Google Adwords'=>array('name'=>'Google Adwords','substr'=>'"^https?\:\/\/(www\.)?google(\.\w+)+\/aclk\?"','term'=>'q'), 'Google Search'=>array('name'=>'Google Search','substr'=>'"^https?\:\/\/(www\.)?google(\.\w+)+\/(\w+)?\?"'), 'Google_Search'=>array('name'=>'Google_Search','substr'=>'"^https?\:\/\/(www\.)?google(\.\w+)+\/.*"'), 'Bing'=>array('name'=>'Bing','substr'=>'"^https?\:\/\/(www\.)?bing.com\/search\?"','term'=>'q'), 'VKontakte'=>array('name'=>'VKontakte','substr'=>'"^https?\:\/\/(www\.)?vk\.com\/"') ); ### если отладка, открываем файл лога if ($debug_mode) $lf=fopen(dirname(__FILE__).'/'.'debug.log','a'); ### функция записи в лог function writelog($s) { global $lf,$debug; if ($debug_mode) fputs($lf,"$s\n"); } ### формируем реферальные данные $t=date('Y-m-d H:i:s'); $ip=$_SERVER['REMOTE_ADDR']; $utmdata=''; $referer=isset($_SERVER['HTTP_REFERER']) ? strtolower(trim($_SERVER['HTTP_REFERER'])) : ''; ### скрипт обработки UTM меток (в разработке) //$utm=isset($_GET['utm_source']) ? strtolower(trim($_GET['utm_source'])) : ''; //$term=isset($_GET['utm_term']) ? strtolower(trim($_GET['utm_term'])) : ''; $utm='нет'; $term='нет'; ### запись отладочной информации writelog("\nSession started (index.php) at '$t', IP='$ip', Referer='$referer'"); writelog("Cokies: ".print_r($_COOKIE,true)); writelog("REQUEST: ".print_r($_REQUEST,true)); ### реферальная информация if (isset($_COOKIE['utmdata'])) { writelog("Found saved cookie UTMdata"); $utmdataexp=explode('&',$_COOKIE['utmdata']); if (count($utmdataexp)>=2 && !empty($utmdataexp[0]) && !empty($utmdataexp[1])) { $t=$utmdataexp[0]; $utm=$utmdataexp[1]; $term=$utmdataexp[2]; $utmdata=$t.'&'.$utm.'&'.$term; } } $newutm=0; if (!empty($referer)) { foreach ($referers as $ref) { writelog("Checking ".$ref['substr']." in $referer..."); if (preg_match($ref['substr'],$referer)) { $utm=$ref['name']; writelog("Found substr for $utm..."); $newutm=1; break; } } } if ($newutm) { $term='нет'; if (!empty($referer)) { if ( isset($referers[$utm]) && isset($referers[$utm]['term']) ) { $termstr=$referers[$utm]['term']; writelog("Processing term for $utm..."); $s=preg_replace('/^.*\?(.*)$/','$1',$referer); $a=explode('&',$s); foreach ($a as $aa) { $ab=explode('=',$aa); if ($ab[0]==$termstr) { $term=rawurldecode($ab[1]); writelog("Found term '$term'"); break; } } } else $utm=$referer; } } if (!empty($referer) && (!$newutm) ) { $host=strtolower(parse_url($referer,PHP_URL_HOST)); if (strpos($host,$myhost)===false) { $utm=$referer; $term='нет'; $newutm=1; } } if ($newutm) { $t=date('Y-m-d H:i:s'); writelog("Newutm: writing new UTM data..."); $utmdata=$t.'&'.$utm.'&'.$term; setcookie('utmdata',$utmdata,time()+60*60*24*30,'/'); } writelog("UTM Data: $utmdata"); writelog("Session finished\n");
Теперь нам, осталось вставить в функцию отправки сообщения на почту, переменные с данными полученными от скрипта, например:
$text .= "Заявка для консультации со специалистом \n" . "Имя: " . $name . "\n" . "Телефон: " . $phone .$m . "\n"; $text .= 'Сайт-источник: ' . $utm. "\n" ; $text .= 'Ключевая фраза: ' . $term ; mail($email,$subject,$text,"From: test@test.ru");

1 комментарий: