Jump to content

Определение города по IP адресу (Sypex Geo)


Recommended Posts

Всем привет!

 

Пытаюсь определить город заказчика по его ip адресу и отправить его в письме формы обратной связи вместе с другими данными. Из готовых решений остановился на Sypex Geo, но пока не получается получить нужную информацию.

Php знаю очень поверхностно, писал по мануалу _sypexgeo.net/ru/docs/

Может кто работает с Sypex Geo, помогите найти ошибку?

Вот часть кода:

 if($err == 0){

	include("SxGeo.php");
	$SxGeo = new SxGeo('SxGeoCity.dat');
	$ip = $_SERVER['REMOTE_ADDR'];
	$data = $SxGeo->getCityFull($ip);


 	$tos = array("info@xxxxxxxxx.ru");
	$subject = "Заказ с сайта";
	$body = "Имя заказчика: {$_POST['name']}<br><br>Телефон заказчика: {$_POST['phone']}<br><br>C формы: {$_POST['from']}";
 	if(isset($_POST['email'])) $body .= "<br><br>E-mail адрес: {$_POST['email']}";
	$body .= "<br><br>Информация о городе: {$data}";
 	$headers= "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8\r\n";
 	foreach($tos as $to)
 		mail($to, $subject, $body, $headers);
 	$out['status'] = "ok";

 } 

В результате письмо содержит последнюю строку "Информация о городе: Array" вместо какой либо полезной инфы.

 

Может есть какие то более удобные решения? Мне нужно каким то образом знать город и часовой пояс заказчика, чтобы не перезванивать по заявке, когда у него ночь :)

Link to post
Share on other sites

Есть вопрос? Задай его профессиональным веб-мастерам, SEO и другим специалистам!

Просто вставлять $data нельзя, нужно точно указать, какой именно кусочек из $data должен быть вставлен.

$data['city'] - даст город, $data['region'] и $data['country'] - регион и страну.

Link to post
Share on other sites

Просто вставлять $data нельзя, нужно точно указать, какой именно кусочек из $data должен быть вставлен.

$data['city'] - даст город, $data['region'] и $data['country'] - регион и страну.

Попробовал. При варианте $data['city'] ничего не передается, при вариантах $data['region'] и $data['country'] так же передается слово "Array".

Link to post
Share on other sites
  • VIP

Попробовал. При варианте $data['city'] ничего не передается, при вариантах $data['region'] и $data['country'] так же передается слово "Array".

Чтобы узнать, что находится в переменной, напишите var_dump ($data) или print_r ($data). И сразу станет понятно, как извлекать данные из массива и есть ли они там вообще.

 

Кстати, зачем Вы переменную $tos сделали как Массив? Чтобы потом сделать цикл?  :) Эта переменная может быть строкой, если надо несколько мыл добавить, то просто перечисляете их через запятую:

$tos = 'info@xxxxxxxxx.ru';
$tos = 'info@xxxxxxxxx.ru, info@yyyyyyy.ru, info@zzzzzz.ru';

Это актуально, если Вы отправляете письма с одним и тем же содержанием по разным мылам.

Link to post
Share on other sites

Чтобы узнать, что находится в переменной, напишите var_dump ($data) или print_r ($data). И сразу станет понятно, как извлекать данные из массива и есть ли они там вообще.

 

Кстати, зачем Вы переменную $tos сделали как Массив? Чтобы потом сделать цикл?  :) Эта переменная может быть строкой, если надо несколько мыл добавить, то просто перечисляете их через запятую:

$tos = 'info@xxxxxxxxx.ru';
$tos = 'info@xxxxxxxxx.ru, info@yyyyyyy.ru, info@zzzzzz.ru';

Это актуально, если Вы отправляете письма с одним и тем же содержанием по разным мылам.

Спасибо! Вроде стала ясна структура массива. print_r ($data) вернула вот такую строку:

 

Array ( [city] => Array ( [id] => 509820 [lat] => 61.78491 [lon] => 34.34691 [name_ru] => Петрозаводск [name_en] => Petrozavodsk ) [region] => Array ( [id] => 552548 [name_ru] => Карелия [name_en] => Kareliya [iso] => RU-KR ) [country] => Array ( [id] => 185 [iso] => RU [lat] => 60 [lon] => 100 [name_ru] => Россия [name_en] => Russia ) )

 

То есть, как я понял, название города хранится в массиве внутри массива. Подскажите, а как до него добраться в коде?

 

По поводу переменной $tos - это то код программиста, который делал сайт. Не представляю зачем это нужно) Я лишь пытаюсь в него добавить нужную информацию.

Link to post
Share on other sites
  • VIP

Array ( [city] => Array ( [id] => 509820 [lat] => 61.78491 [lon] => 34.34691 [name_ru] => Петрозаводск [name_en] => Petrozavodsk ) [region] => Array ( [id] => 552548 [name_ru] => Карелия [name_en] => Kareliya [iso] => RU-KR ) [country] => Array ( [id] => 185 [iso] => RU [lat] => 60 [lon] => 100 [name_ru] => Россия [name_en] => Russia ) )

 

То есть, как я понял, название города хранится в массиве внутри массива. Подскажите, а как до него добраться в коде?

 

Давайте разбирать вглубь, форматируя полученную инфу:

Array ( 
 [city] => Array ( [id] => 509820 [lat] => 61.78491 [lon] => 34.34691 [name_ru] => Петрозаводск [name_en] => Petrozavodsk )
 [region] => Array ( [id] => 552548 [name_ru] => Карелия [name_en] => Kareliya [iso] => RU-KR )
 [country] => Array ( [id] => 185 [iso] => RU [lat] => 60 [lon] => 100 [name_ru] => Россия [name_en] => Russia )
)

То же самое:

Array ( 
 [city] => Array ( 
           [id] => 509820 
           [lat] => 61.78491 
           [lon] => 34.34691 
           [name_ru] => Петрозаводск 
           [name_en] => Petrozavodsk 
          )
 [region] => Array ( 
             [id] => 552548 
             [name_ru] => Карелия 
             [name_en] => Kareliya 
             [iso] => RU-KR 
            )
 [country] => Array ( 
              [id] => 185 
              [iso] => RU 
              [lat] => 60 
              [lon] => 100 
              [name_ru] => Россия 
              [name_en] => Russia 
             )
)

И уже видно, как пролезть к нужной инфе, к примеру, буду сразу в переменную складывать, чтобы удобнее пользоваться было в дальнейшем:

$city_name_ru = $data['city']['name_ru']; //Петрозаводск
$region_name_ru = $data['region']['name_ru']; //Карелия
$country_name_ru = $data['country']['name_ru']; //Россия
Link to post
Share on other sites

 

И уже, как пролезть к нужной инфе, к примеру, буду сразу в переменную складывать, чтобы удобнее пользоваться было:
$city_name_ru = $data['city']['name_ru']; //Петрозаводск
$region_name_ru = $data['region']['name_ru']; //Карелия
$country_name_ru = $data['country']['name_ru']; //Россия

Спасибо большое! Все заработало :)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...