Ako zistiť krajinu toho, kto si stránku prezerá?
- jiri.pudil
- Nette Blogger | 1032
Jazyk se dá odvodit z hlavičky Accept-Language
, viz https://api.nette.org/…Request.html#….
Ale měj připravený i fallback, pokud ti tu hlavičku někdo nepošle.
- srigi
- Nette Blogger | 558
Existuje celkom pekna free geoip databaza, treba ju vsak pravidelne obnovovat. Viem, ze pre macOS je na to balicek geoipupdate, asi bude nieco aj pre linux.
Stiahnutu geoip databazu spracujes cca takto:
composer.json
{
"require": {
"maxmind-db/reader": "^1.1"
}
}
code.php
require_once __DIR__ . '/vendor/autoload.php';
$reader = new MaxMind\Db\Reader(__DIR__ . '/GeoLite2-City.mmdb');
$res = $reader->get('95.82.177.238');
$reader->close();
echo 'Time zone : ';
echo "{$res['location']['time_zone']}\n";
echo 'Country : ';
echo "{$res['country']['names']['en']} ({$res['country']['iso_code']})\n";
echo 'State : ';
echo "{$res['subdivisions']['0']['names']['en']} ";
echo "({$res['subdivisions']['0']['iso_code']})\n";
echo 'City : ';
echo "{$res['city']['names']['en']}\n";
echo "\n";
print_r($res);
Vystup potom vypada cca takto:
Time zone : Europe/Prague
Country : Czechia (CZ)
State : South Moravian (64)
City : Brno
Array
(
[city] => Array
(
[geoname_id] => 3078610
[names] => Array
(
[de] => Brünn
[en] => Brno
[es] => Brno
[fr] => Brno
[ja] => ブルノ
[pt-BR] => Brno
[ru] => Брно
)
)
[continent] => Array
(
[code] => EU
[geoname_id] => 6255148
[names] => Array
(
[de] => Europa
[en] => Europe
[es] => Europa
[fr] => Europe
[ja] => ヨーロッパ
[pt-BR] => Europa
[ru] => Европа
[zh-CN] => 欧洲
)
)
[country] => Array
(
[geoname_id] => 3077311
[iso_code] => CZ
[names] => Array
(
[de] => Tschechien
[en] => Czechia
[es] => República Checa
[fr] => République tchèque
[ja] => チェコ共和国
[pt-BR] => Tchéquia
[ru] => Чешская Республика
[zh-CN] => 捷克共和国
)
)
[location] => Array
(
[accuracy_radius] => 20
[latitude] => 49.2
[longitude] => 16.6333
[time_zone] => Europe/Prague
)
[postal] => Array
(
[code] => 625 00
)
[registered_country] => Array
(
[geoname_id] => 3077311
[iso_code] => CZ
[names] => Array
(
[de] => Tschechien
[en] => Czechia
[es] => República Checa
[fr] => République tchèque
[ja] => チェコ共和国
[pt-BR] => Tchéquia
[ru] => Чешская Республика
[zh-CN] => 捷克共和国
)
)
[subdivisions] => Array
(
[0] => Array
(
[geoname_id] => 3339536
[iso_code] => 64
[names] => Array
(
[de] => Südmährische Region
[en] => South Moravian
[es] => Región de Moravia Meridional
[fr] => Moravie-du-Sud
[ja] => 南モラヴィア州
[pt-BR] => Morávia do Sul
[ru] => Южноморавский край
)
)
[1] => Array
(
[geoname_id] => 3078609
[iso_code] => 642
[names] => Array
(
[en] => Mesto Brno
)
)
)
)
Databazovy subor je cca 50MB velky a na mojom notebooku trvalo spracovanie cca 27ms.
Editoval srigi (19. 9. 2017 9:16)
- GEpic
- Člen | 566
Tohle nějakou chvíli mělo Trello a automaticky mi to vyhodnocovalo Němčinu a nebyla možnost to ručně změnit. To dokáže nasrat.
PS:
A čo hovoríte na toto? :
<?php $user_ip = getenv('REMOTE_ADDR'); $geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip")); $country = $geo["geoplugin_countryName"]; $city = $geo["geoplugin_city"]; echo "country : ".$country."<br/>"; ?>
Tohle tě bude při každém requestu stát čas a navíc si tvoříš závislost na jiném serveru.
Není jednodušší nechat člověka si vybrat když ho to stojí JEDEN klik?
Editoval GEpic (24. 9. 2017 10:39)