В нашем современном мире многие до сих пор верят в анонимность в интернете (я не говорю про хабражителей:) ). Многие даже не понимают, что img.2ip.ru/ooops.jpg правда узнаёт информацию о пользователе. Предлагаю сделать такой же сервис, то есть один человек другому пересылает ссылку на картинку, вместо открытия картинки выполняется наш скрипт, после выполнения он редеректит на «нормальную» картинку. И так, сначала сделаем простые вещи: определим ip человека, его браузер, операционку и так далее:
$from = $_SERVER['HTTP_REFERER']; //Откуда на нашу страницу перешёл пользователь if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox') ) $browser = "MozillaFirefox"; //браузер elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'YaBrowser') ) $browser = "YandexBrowser"; elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) $browser = "Google Chrome"; elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Safari') ) $browser = "Safari"; elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Opera') ) $browser = "Opera"; elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Mail') ) $browser = "MailRuBrowser"; elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'AppleWebKit') ) $browser = "Mobile"; $ip = $_SERVER['REMOTE_ADDR']; $spy_user = substr($_SERVER['QUERY_STRING'], 0, -4); // http://наш_сайт.домен0лвл/наша_страница.php?<ВОТ ЭТО БУДЕТ ПОМЕЩЕНО СЮДа>.gif. Это нужно для того, чтобы пользователи посылали "свою" картинку, то есть мы могли определить, какой именно пользователь послал "картинку" перешедшему сюда function get_os($user_agent) //функция для узнавания операционки { $oses = array ( 'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)', 'Windows 98' => '(Windows 98)|(Win98)', 'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)', 'Windows XP' => '(Windows NT 5.1)|(Windows XP)', 'Windows 2003' => '(Windows NT 5.2)', 'Windows 7' => '(Windows NT 6.1)', 'Windows ME' => 'Windows ME', 'Open BSD'=>'OpenBSD', 'Sun OS'=>'SunOS', 'Linux'=>'(Linux)|(X11)', 'Macintosh'=>'(Mac_PowerPC)|(Macintosh)', 'QNX'=>'QNX', 'BeOS'=>'BeOS', 'OS/2'=>'OS/2', 'iOS'=>'iOS', 'Android'=>'Android', 'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)' ); foreach($oses as $key=>$value) { if (preg_match('#'.$value.'#i', $user_agent)) return $key; } return 'Unknown'; } if(!(isset($from))) $from = "Unknown"; $OS = get_os($_SERVER['HTTP_USER_AGENT']); //узнаём операционку $info = $_SERVER['HTTP_USER_AGENT']; //на всякий случай записываем всю строку - на случай ошибки. Пусть будет
И так, самое постое мы сделали. Теперь надо узнать страну, город и провайдер. Через какое-то время проб и ошибок я понял, что чтобы узнать провайдера, нужно узнать область ip, которыми он «командует». Следовательно, нужно составить базу областей ip и провайдеров, что очень сложно, так как провайдеров очень много. Поэтому я решил использовать какой-нибудь стандартный whois.
Остановился на русском, но, в принципе, можно использовать любой другой.
if( $curl = curl_init() ) { $ip = $_SERVER["REMOTE_ADDR"]; curl_setopt($curl, CURLOPT_URL, 'http://ip-whois.net/ip_geo.php?ip='.$ip); curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); $matches = array(); $country = preg_match_all("/Страна: (.*)/i", $out, $matches); $country = $matches[1][1]; curl_close($curl); }
Аналогично делаем с городом, регионом и провайдером. После этого результаты работы всей программы кладём в базу.
ссылка на оригинал статьи http://habrahabr.ru/post/211953/
Добавить комментарий