определение адреса по IP

painbot

Ежик в тумане
Добрых дней!
PHP:
<?php 
session_start(); 
function ShowGeoIp($key){
	$url = 'http://194.85.91.253:8090/geo/geo.html'; 
	if (!isset($_SESSION['location']))
	{
	if (!empty($_SERVER['HTTP_CLIENT_IP']))
	{
	$ip = $_SERVER['HTTP_CLIENT_IP'];
	} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
	$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	} else {
	$ip = $_SERVER['REMOTE_ADDR'];
	}
	$cl = curl_init(); 
	$query = '<ipquery><fields><all/></fields><ip-list><ip>'.$ip.'</ip></ip-list></ipquery>';
	curl_setopt($cl, CURLOPT_URL, $url);
	curl_setopt($cl, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($cl, CURLOPT_TIMEOUT, 2);
	curl_setopt($cl, CURLOPT_POST, 1);
	curl_setopt($cl, CURLOPT_POSTFIELDS, $query);
	$result = curl_exec($cl);
	curl_close($cl); 
	preg_match_all("|<region>(.*?)</region>|", $result, $region);
	preg_match_all("|<city>(.*?)</city>|", $result, $city);
	preg_match_all("|<district>(.*?)</district>|", $result, $district);
	preg_match_all("|<lat>(.*?)</lat>|", $result, $lat);
	preg_match_all("|<lng>(.*?)</lng>|", $result, $lng);
	$_SESSION['location'] = array();
	$_SESSION['location']['region'] = $region[1][0];
	$_SESSION['location']['city'] = $city[1][0];
	$_SESSION['location']['district'] = $district[1][0];
	$_SESSION['location']['lat'] = $lat[1][0];
	$_SESSION['location']['lng'] = $lng[1][0];
	$location = $_SESSION['location'][$key];
	} else {
	$location = $_SESSION['location'][$key];
	}
	return $location;
}
echo ShowGeoIp('city');
echo ShowGeoIp('$region');
?>

Вот собственно вопрос:

допустим, если у меня выводится город Москва, то вместе с "МоскваМосковскаяобласть" должен выводится телефон допустим "123456", а если выводится "РостовРостовскаяобласть" - то выводится телефон "654321", да и еще если это будет ближайший город к Москве то соответственно выводит телефон Москвы а не Ростова...

как это превратить в жизнь пока не дошел, может кто поможет?

Думаю - создается база с телефонами допустим база "IP" таблица "nombersIP", где поля соотвественно id,city,region,nomber...
01 Москва Московская область 123456
02 Ростов Ростовская область 654321
03 Тула 123456
и т.д...
 

painbot

Ежик в тумане
nomber - это номер телефона, тоесть если Тула - выводит "ТулаТульскаяобласть" и номер телефона который я показал в базе "123456" - а как прописать в коде пока не дошел)))

я так понимаю нужно работать с '$city'
 

craz

Нестандартное звание
нет такого слова)

ладно не суть, давай подебажу те код для начала)

echo ShowGeoIp('city');
echo ShowGeoIp('$region');

зачем '$region'?

что выводят эти строки?
если делать как ты говоришь, то ты должен иметь две таблицы наверное city уникальное поле лучше сделать
geo_table
id | city | region
1 | Moscow | Moscow state
----------------------------------------
//--//--//--//--//--//--//--//--//
phone_table
id | phone | city_id
1 | 8945478 | 1
2 | 4654686 | 2

select phone from phone_table where id = (select id from geo_table where city = {$ShowGeoIp('city')})

что то типа будет
 

painbot

Ежик в тумане
Если Ip Московский :
echo ShowGeoIp('city');
echo ShowGeoIp('$region');
то выводится : "МоскваМосковскаяобласть"

"зачем '$region'?" - предполагается, что если ip принадлежит "Московскаяобласть", но не Москве и Туле , то выводит все равно по полю "Московскаяобласть" - это нужно для того, если допустим в Московской области будут два города с разными номерами телефонов и нужно будет один из телефонов установить по умолчанию, а вот второй показывать только для одного города.....
 

craz

Нестандартное звание
echo ShowGeoIp('$region');

ты не понял меня, у тебя вроде ошибка синтаксиса внутри
PHP:
' вот тут '
вроде как не распознаются переменные
 

craz

Нестандартное звание
Если Ip Московский :
echo ShowGeoIp('city');
echo ShowGeoIp('$region');
то выводится : "МоскваМосковскаяобласть"

"зачем '$region'?" - предполагается, что если ip принадлежит "Московскаяобласть", но не Москве и Туле , то выводит все равно по полю "Московскаяобласть" - это нужно для того, если допустим в Московской области будут два города с разными номерами телефонов и нужно будет один из телефонов установить по умолчанию, а вот второй показывать только для одного города.....
все выполнимо по той схеме что я предложил начинай программить, появятся вопросы будем пытаться порешать.
 

painbot

Ежик в тумане
echo ShowGeoIp('$region');

ты не понял меня, у тебя вроде ошибка синтаксиса внутри
PHP:
' вот тут '
вроде как не распознаются переменные
- все работает с такими скобками))...
ладно, попробую с двумя таблицами - )) Спасибо, за совет...
 
Сверху