Yii — это веб-фреймворк PHP с открытым исходным кодом, цель которого — позволить разработчикам легко создавать веб-сайты. Он основан на шаблоне Model-View-Controller (MVC). Он предоставляет различные компоненты, например абстракцию базы данных, кэширование, аутентификацию и безопасность. С помощью этих компонентов разработчики могут легко сосредоточиться на логике приложения. Также в Yii была куча расширений, которые могут помочь разработчикам добавить в приложение определенный функционал.

Расширения Yii — это распространяемые пакеты, которые могут предоставить готовые к использованию функции для приложения. Сообщество Yii часто поддерживает и обновляет расширения, чтобы убедиться, что расширения всегда совместимы с последней версией Yii. По умолчанию Yii установит расширения, загруженные в репозиторий Packagist. Yii рекомендует разработчикам использовать Composer для установки расширения из Packagist.

В этом руководстве мы покажем вам, как использовать IP2Location.io PHP SDK в Yii для получения информации о геолокации для просмотра и перенаправления страниц. IP2Location.io PHP SDK — это пакет PHP, который позволяет пользователям получать набор информации о геолокации для IP-адреса. Информация включает страну, регион, район, город, широту, долготу, почтовый индекс, часовой пояс, ASN, ISP, домен, скорость сети, код IDD, код города, данные метеостанции, MNC, MCC, бренд мобильной связи, высоту над уровнем моря, использование. тип, тип адреса, категория рекламы и данные прокси. Пакет поддерживает поиск как IPV4, так и IPV6.

Прежде чем мы начнем, убедитесь, что вы правильно установили и настроили Yii и Composer. Для работы IP2Location.io PHP SDK требуется ключ API. Вы можете подписаться на получение бесплатного ключа API. Обратите внимание, что переводы континентов, стран, регионов и городов доступны только в планах Plus и Security.

Отображение информации о геолокации

  1. Прежде всего, если вы не установили PHP SDK IP2Location.io, вы можете выполнить следующую команду в консоли, чтобы сделать это:composer require ip2location/ip2location-io-php
  2. После этого создайте файл шаблона с именем geolocation.php в папке yii_project_root_directory/views/site/ и откройте файл в любом текстовом редакторе.
  3. Вставьте в файл следующее содержимое:
<?php
use yii\helpers\Html;

// Configures IP2Location.io API key
$config = new \IP2LocationIO\Configuration('YOUR_API_KEY');
$ip2locationio = new \IP2LocationIO\IPGeolocation($config);
?>
<p>
This is a geolocation page.
</p>

<?php
try {
	// Lookup IP address geolocation data
	$result = $ip2locationio->lookup('8.8.8.8');
	echo 'IP Address           : ' . $result->ip . "<br>";
	echo 'Country Code         : ' . $result->country_code . "<br>";
	echo 'Country Name         : ' . $result->country_name . "<br>";
	echo 'Region Name          : ' . $result->region_name . "<br>";
	echo 'City Name            : ' . $result->city_name . "<br>";
	echo 'City Latitude        : ' . $result->latitude . "<br>";
	echo 'City Longitude       : ' . $result->longitude . "<br>";
	echo 'ZIP Code             : ' . $result->zip_code . "<br>";
	echo 'Time Zone            : ' . $result->time_zone . "<br>";
	echo 'ASN                  : ' . $result->asn . "<br>";
	echo 'AS                   : ' . $result->as . "<br>";
	echo 'Is Proxy             : ' . (($result->is_proxy) ? 'TRUE' : 'FALSE') . "<br>";
	echo 'ISP Name             : ' . ($result->isp ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Domain Name          : ' . ($result->domain ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Net Speed            : ' . ($result->net_speend ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'IDD Code             : ' . ($result->idd_code ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Area Code            : ' . ($result->area_code ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Weather Station Code : ' . ($result->weather_station_code ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Weather Station Name : ' . ($result->weather_station_name ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'MCC                  : ' . ($result->mcc ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'MNC                  : ' . ($result->mnc ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Mobile Carrier       : ' . ($result->mobile_brand ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Elevation            : ' . ($result->elevation ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Usage Type           : ' . ($result->usage_type ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Address Type         : ' . ($result->address_type ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Category Code        : ' . ($result->ads_category ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'Category Name        : ' . ($result->ads_category_name ?? 'FIELD NOT SUPPORTED') . "<br>";
	echo 'District Name        : ' . ($result->district ?? 'FIELD NOT SUPPORTED') . "<br>";

	if (isset($result->continent)) {
		echo 'Continent Name        : ' . $result->continent->name . "<br>";
		echo 'Continent Code        : ' . $result->continent->code . "<br>";
		echo 'Continent Hemisphere  : '; print_r($result->continent->hemisphere); echo "<br>";
		echo 'Continent Translation : ' . $result->continent->translation->value . ' (' . $result->continent->translation->lang . ')' . "<br>";
	}

	if (isset($result->country)) {
		echo 'Country Name          : ' . $result->country->name . "<br>";
		echo 'Country Alpha 3 Code  : ' . $result->country->alpha3_code . "<br>";
		echo 'Country Numeric Code  : ' . $result->country->numeric_code . "<br>";
		echo 'Country Demonym       : ' . $result->country->demonym . "<br>";
		echo 'Country Flag          : ' . $result->country->flag . "<br>";
		echo 'Country Capital       : ' . $result->country->capital . "<br>";
		echo 'Country Total Area    : ' . $result->country->total_area . "<br>";
		echo 'Country Population    : ' . $result->country->population . "<br>";
		echo 'Country Currency Code : ' . $result->country->currency->code . "<br>";
		echo 'Country Currency Name : ' . $result->country->currency->name . ' (' . $result->country->currency->symbol . ')' . "<br>";
		echo 'Country Language      : ' . $result->country->language->name . ' (' . $result->country->language->code . ')' . "<br>";
		echo 'Country TLD           : ' . $result->country->tld . "<br>";
		echo 'Country Translation   : ' . $result->country->translation->value . ' (' . $result->country->translation->lang . ')' . "<br>";
	}

	if (isset($result->region)) {
		echo 'Region Name        : ' . $result->region->name . "<br>";
		echo 'Region Code        : ' . $result->region->code . "<br>";
		echo 'Region Translation : ' . $result->region->translation->value . ' (' . $result->region->translation->lang . ')' . "<br>";
	}

	if (isset($result->city)) {
		echo 'City Name        : ' . $result->city->name . "<br>";
		echo 'City Translation : ' . $result->city->translation->value . ' (' . $result->city->translation->lang . ')' . "<br>";
	}

	if (isset($result->time_zone_info)) {
		echo 'Olson Time Zone : ' . $result->time_zone_info->olson . "<br>";
		echo 'Current Time    : ' . $result->time_zone_info->current_time . "<br>";
		echo 'GMT Offset      : ' . $result->time_zone_info->gmt_offset . "<br>";
		echo 'Is DST          : '; echo ($result->time_zone_info->is_dst) ? 'TRUE' : 'FALSE'; echo "<br>";
		echo 'Sunrise Time    : ' . $result->time_zone_info->sunrise . "<br>";
		echo 'Sunset Time     : ' . $result->time_zone_info->sunset . "<br>";
	}

	if (isset($result->geotargeting)) {
		echo 'Metro Code : ' . $result->geotargeting->metro . "<br>";
	}

	if (isset($result->proxy)) {
		echo 'Proxy Last Seen : ' . $result->proxy->last_seen . "<br>";
		echo 'Proxy Type      : ' . $result->proxy->proxy_type . "<br>";
		echo 'Proxy Threat    : ' . $result->proxy->threat . "<br>";
		echo 'Proxy Provider  : ' . $result->proxy->provider . "<br>";
	}
} catch(Exception $e) {
	echo $e->getCode() . ": " . $e->getMessage();
}
?>

4. Затем откройте файл SiteController.php, расположенный в вашем yii_project_root_directory/controllers/, в любом текстовом редакторе и вставьте следующее содержимое в SiteController. > класс:

публичная функция actionGeolocation()
{
return $this-›render(‘геолокация’);
}

5. Введите URL-адрес /index.php?r=site%2Fgeolocation и запустите. Вы должны увидеть информацию об IP-адресе 8.8.8.8.

Перенаправление пользователя на основе его геолокации

  1. Прежде всего, если вы не установили PHP SDK IP2Location.io, вы можете запустить следующую команду в консоли, чтобы сделать это:composer require ip2location/ip2location-io-php
  2. Добавьте следующие строки в файл контроллера, который вы хотите использовать для перенаправления (обратите внимание, что вы можете изменить имя функции на другое имя с действием в качестве префикса):
public function actionRedirect()
    {
		$ip = Yii::$app->request->userIP;
		
		// Configure IP2Location.io API key
		$config = new \IP2LocationIO\Configuration('YOUR_API_KEY');
		$ip2locationio = new \IP2LocationIO\IPGeolocation($config);
		
		// Get visitor IP address for lookup
		$result = $ip2locationio->lookup($ip);
		
        	if ($result->country_code == 'US') {
			return $this->render('index');
		}
    }

После выполнения этого руководства вы сможете выполнять поиск и перенаправление геолокации с помощью IP2Location.io PHP SDK в Yii. Вы можете использовать информацию о геолокации в различных областях, например, предоставляя контент для настройки региона.