Здравствуйте! Решил написать информер на PHP. В итоге скрипт должен уметь: 1) Определять IP 2) Определять страну 3) Определять OS и браузер 4) Всё должно выводиться в графическом виде 5) Информер должен быть распростроняемым чтобы можно было сделать на него ссылку вида: host.ru/informer.png Я столкнулся с некоторыми трудностями: 1) не знаю как определить страну 2) Не знаю как определить OS 3) как сделать его распространяемым Если у кого есть готовые выложите плз! За дельные советы с меня +
1. geoip.dat (можешь взять из любого сплойт пака) 2. парсить $HTTP_USER_AGENT 3. изменить .htaccess, чтобы .png обрабатывалось как php, если ты об этом
Не нашёл я в той статье определения ОС, может и просмотрел но всё же вот один из способов: PHP: <?php $agent = htmlspecialchars(getenv("HTTP_USER_AGENT")); if (strpos($agent, "NT 5.1") == true) {echo"Windows XP";} elseif (strpos($agent, "NT 5.0") == true) {echo"Windows 2000(NT)";} else {echo"unknown";} ?> То есть ищешь соответствие ОС в юзер агенте. 5.1 это ХРюша, 5.0 это 2000 или НТ. Других кодов я не знаю, но это можно определить опытным путём или погуглив. А ещё почему-то никто не вспомнил про: PHP: $os = htmlspecialchars(getenv("OS")); echo "$os"; Но она как и браузер показывает семейство ОС а не конкретно твою. Т.е 2000 и ХР относятся к семейству NT, поэтому будет показываться Windows_NT...
PHP: <? /* Файл : sniffer.php Назначение: Идентификация типа/версии браузера и платформы Автор: В. Дж. Гилмор Дата : 24 августа 2000 г. */ // Функция: browser_info // Назначение: Возвращает тип и версию браузера function browser_info ($agent) { // Определить тип браузера // Искать сигнатуру Internet Explorer if (ereg('MSIE ([0-9].[0-9]{1,2})', $agent, $version)) $browse_type = "IE"; $browse version = $version[1]; // Искать сигнатуру Opera elseif (ereg( 'Opera ([0-9].[0-9]{1,2})'. $agent, $version)): $browse_type = "Opera": $browse_version = $version[1]: // Искать сигнатуру Netscape. Проверка браузера Netscape // *должна* выполняться после проверки Internet Explorer и Opera, // поскольку все эти браузеры любят сообщать имя // Mozilla вместе с настоящим именем. elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})'. $agent, $version)) : $browse_type = "Netscape"; $browse_version = $version[1]; // Если это не Internet Explorer, Opera или Netscape. // значит, мы обнаружили неизвестный браузер, else : $browse_type = "Unknown"; $browse_version = "Unknown"; endif: // Вернуть тип и версию браузера в виде массива return array ($browse_type, $browse_version); } // Конец функции browser_info // Функция: opsys_info // Назначение: Возвращает информацию об операционной системе пользователя function opsys_info($agent) { // Идентифицировать операционную систему // Искать сигнатуру Windows if ( strstr ($agent. 'win') ) : $opsys = "windows"; // Искать сигнатуру Linux elseif ( strstr($agent, 'Linux') ) : $opsys = "Linux"; // Искать сигнатуру UNIX elseif ( strstr (Sagent, 'Unix') ) : $opsys = "Unix"; // Искать сигнатуру Macintosh elseif ( strstr ($agent, 'Mac') ) : $opsys = "Macintosh"; // Неизвестная платформа else : $opsys = "Unknown"; endif; // Вернуть информацию об операционной системе return $opsys; } // Конец функции opsys_info // Сохранить возвращаемый массив в списке list ($browse_type. $browse_version) = browser_info ($HTTP_USER_AGENT); Soperating_sys = opsysjnfo ($HTTP_USER_AGENT); print "Browser Type: $browse_type <br>"; print "Browser Version: $browse_version <br>"; print "Operating System: $operating_sys <br>": ?>
если ошибаюсь поправьте но вроде так тоже возможно PHP: $user_agent = $HTTP_USER_AGENT; function detect_os() { global $user_agent; if (strstr($user_agent, "Windows 95")) $os = "Windows 95"; elseif (strstr($user_agent, "Windows NT 4")) $os = "Windows NT 4"; elseif (strstr($user_agent, "Windows 98")) $os = "Windows 98"; elseif (strstr($user_agent, "Win 9x 4.9")) $os = "Windows ME"; elseif (strstr($user_agent, "Windows NT 5.0")) $os = "Windows 2000"; elseif (strstr($user_agent, "Windows NT 5.1")) $os = "Windows XP"; elseif (strstr($user_agent, "Windows NT 5.2")) $os = "Windows 2003"; elseif (strstr($user_agent, "Windows NT 6.0")) $os = "Windows Vista"; elseif (strstr($user_agent, "Linux")) $os = "Linux"; elseif (strstr($user_agent, "Mac OS")) $os = "Mac OS"; else $os = "Other"; return $os; } function detect_browser() { global $user_agent; if (eregi("(opera) ([0-9]{1,2}.[0-9]{1,3}){0,1}", $user_agent, $bv) or eregi("(opera/)([0-9]{1,2}.[0-9]{1,3}){0,1}", $user_agent, $bv)) { $type = "Opera"; $browser = "Opera" . " " . $bv[2]; } elseif (eregi("(konqueror)/([0-9]{1,2}.[0-9]{1,3})", $user_agent, $bv)) { $type = "Konqueror"; $browser = "Konqueror" . " " . $bv[2]; } elseif (eregi("(lynx)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})", $user_agent, $bv)) { $type = "Lynx"; $browser = "Lynx" . " " . $bv[2]; } elseif (eregi("(links) \\(([0-9]{1,2}.[0-9]{1,3})", $user_agent, $bv)) { $type = "Links"; $browser = "Links" . " " . $bv[2]; } elseif (eregi("(msie) ([0-9]{1,2}.[0-9]{1,3})", $user_agent, $bv)) { $type = "Internet Explorer"; $browser = "Internet Explorer" . " " . $bv[2]; } elseif (eregi("(netscape6)/(6.[0-9]{1,3})", $user_agent, $bv)) { $type = "Netscape"; $browser = "Netscape" . " " . $bv[2]; } elseif (eregi("(firefox)/([0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2})", $user_agent, $bv) or eregi("(firefox)/([0-9]{1,2}.[0-9]{1,2})", $user_agent, $bv)) { $type = "Firefox"; $browser = "Firefox" . " " . $bv[2]; } elseif (eregi("(mozilla)/([0-9]{1,2}.[0-9]{1,3})", $user_agent, $bv)) { $type = "Mozilla"; $browser = "Mozilla" . " " . $bv[2]; } else { $type = "Other"; $browser = "Other"; } return $browser; } function win_uni ($in) { $in = convert_cyr_string($in ,"w","i"); $out = ""; for ($i=0; $i < strlen($in); $i++) { $char = ord($in[$i]); $out .= ($char > 175)?"&#".(1040+($char-176)).";":$in[$i]; } return $out; }
И чего вы юзаете $http_user_agent, а не $_server['http_user_agent']? И не забываейте, что юзер-агента можно подделать
Вот написал: http://www.ssb1981.sid.su/Files/download.php?file=0 Информер показывает: IP, Браузер, Windows Информер распространяемый! Было задумано 5 пунктов, из которых 4 осуществлены. Пример:
Определение города заработает в ближайшеее время, причём если пользователь из России то будет отображаться город, край и регион.