Как узнать информацию по ip адресу
Сегодня хотел бы законспектировать очень полезный на мой взгляд готовый php класс для получения информации об ip адресе. Применить данный php класс можно для разнообразных целей, наведу пару примеров.
Пример №1 - да пустим ваш сайт мульти язычный и рассчитан на русскую и украинскую аудиторию и данный класс поможет определить какую версию сайта показывать посетителю.
Пример №2 - на одном интернет ресурсе при комментировании материалов выводится не только имя и время добавления комментария а также и город комментатора.
Найти применения такому скрипту можно массу, теперь перейдем к делу, для начала создадим php файл для нашего класса и назавем его geoplugin.class.php и поместим в него наш кдасс:
class geoPlugin {
//the geoPlugin server
var $host = 'http://www.geoplugin.net/php.gp?ip={IP}&base_currency={CURRENCY}';
//the default base currency
var $currency = 'USD';
//initiate the geoPlugin vars
var $ip = null;
var $city = null;
var $region = null;
var $areaCode = null;
var $dmaCode = null;
var $countryCode = null;
var $countryName = null;
var $continentCode = null;
var $latitute = null;
var $longitude = null;
var $currencyCode = null;
var $currencySymbol = null;
var $currencyConverter = null;
function geoPlugin() {
}
function locate($ip = null) {
global $_SERVER;
if ( is_null( $ip ) ) {
$ip = $_SERVER['REMOTE_ADDR'];
}
$host = str_replace( '{IP}', $ip, $this->host );
$host = str_replace( '{CURRENCY}', $this->currency, $host );
$data = array();
$response = $this->fetch($host);
$data = unserialize($response);
//set the geoPlugin vars
$this->ip = $ip;
$this->city = $data['geoplugin_city'];
$this->region = $data['geoplugin_region'];
$this->areaCode = $data['geoplugin_areaCode'];
$this->dmaCode = $data['geoplugin_dmaCode'];
$this->countryCode = $data['geoplugin_countryCode'];
$this->countryName = $data['geoplugin_countryName'];
$this->continentCode = $data['geoplugin_continentCode'];
$this->latitude = $data['geoplugin_latitude'];
$this->longitude = $data['geoplugin_longitude'];
$this->currencyCode = $data['geoplugin_currencyCode'];
$this->currencySymbol = $data['geoplugin_currencySymbol'];
$this->currencyConverter = $data['geoplugin_currencyConverter'];
}
function fetch($host) {
if ( function_exists('curl_init') ) {
//use cURL to fetch data
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.0');
$response = curl_exec($ch);
curl_close ($ch);
} else if ( ini_get('allow_url_fopen') ) {
//fall back to fopen()
$response = file_get_contents($host, 'r');
} else {
trigger_error ('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR);
return;
}
return $response;
}
function convert($amount, $float=2, $symbol=true) {
//easily convert amounts to geolocated currency.
if ( !is_numeric($this->currencyConverter) || $this->currencyConverter == 0 ) {
trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE);
return $amount;
}
if ( !is_numeric($amount) ) {
trigger_error ('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING);
return $amount;
}
if ( $symbol === true ) {
return $this->currencySymbol . round( ($amount * $this->currencyConverter), $float );
} else {
return round( ($amount * $this->currencyConverter), $float );
}
}
function nearby($radius=10, $limit=null) {
if ( !is_numeric($this->latitude) || !is_numeric($this->longitude) ) {
trigger_error ('geoPlugin class Warning: Incorrect latitude or longitude values.', E_USER_NOTICE);
return array( array() );
}
$host = "http://www.geoplugin.net/extras/nearby.gp?lat=" . $this->latitude . "&long=" . $this->longitude . "&radius={$radius}";
if ( is_numeric($limit) )
$host .= "&limit={$limit}";
return unserialize( $this->fetch($host) );
}
}
как видите наш класс использует сторонний сервис (geoplugin.net) но я это считаю положительным фактором потому что у нас всегда под рукой актуальная база ip адресов.
Теперь к тому файлу в котором нам нужно использовать наш php класс для получения информации об ip адресе подключаем класс следующим образом:
require_once('geoplugin.class.php');
теперь когда класс geoplugin.class подключен к нашему файлу можно с ним работать следующим образом:
$geoplugin = new geoPlugin();
//locate the IP
$geoplugin->locate('109.191.67.228');
echo "Результат по ip адресу {$geoplugin->ip}
\n".
"Город: {$geoplugin->city}
\n".
"Регион: {$geoplugin->region}
\n".
"Страна: {$geoplugin->countryName}
\n".
"Код страны: {$geoplugin->countryCode}
\n".
"Валюта: {$geoplugin->currencyCode}
\n";
Как видите в строке 3 мы в скобках помещаем ip адрес по которому можно получить информацию, в данные скобки также можно добавить переменную с ip адресом посетителя а сам ip адрес посетителя можно вытащить из глобального массива
$ips = $_SERVER["REMOTE_ADDR"];
Вот такой не хитрый и полезный класс для получении информации об ip адресе посетителя.
Демо пример работы php класса:
Ваш ip адрес 207.241.229.50
Город: San Francisco
Регион: CA
Страна: United States
Код страны: US
Валюта: USD
PHP скрипт чата
Итак, в этой статье мы поговорим о PHP скрипт чата. Основная масса сайтов, расположенных в просторах....
Php скрипт регистрации и авторизации
Давно хотелось обратить внимание пользователей на проблему регистрации и авторизации на сайте. Большая....
Php скрипт мониторинга игровых серверов
Найти готовый php скрипт мониторинга игровых серверов - задача не из простых. На сегодняшний....
Скрипт мониторинга серверов на php
В этой статье мы поговорим о том, что такое скрипт мониторинга серверов на php и для чего он нужен вообще....
PHP скрипт форума
Главным преимуществом PHP является его практичность и легкость. Благодаря использованию PHP ваш сайт станет....
Скрипт обратной связи php
Практически на всех сайтах, созданных на различных CMS, существует меню обратной связи. Данное меню очень....