В нашем современном мире многие до сих пор верят в анонимность в интернете (я не говорю про читателей:) ). Многие даже не понимают, что 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);
}
Аналогично делаем с городом, регионом и провайдером. После этого результаты работы всей программы кладём в базу.
Автор: Samin