{"id":29758,"date":"2021-06-22T18:26:00","date_gmt":"2021-06-22T15:26:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29758"},"modified":"2021-10-18T03:30:11","modified_gmt":"2021-10-18T00:30:11","slug":"znajdz-geolokalizacje-za-pomoca-adresu-ip-za-darmo-w-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/znajdz-geolokalizacje-za-pomoca-adresu-ip-za-darmo-w-php\/","title":{"rendered":"Znajd\u017a geolokalizacj\u0119 za pomoc\u0105 adresu IP za darmo w PHP"},"content":{"rendered":"<p>W przypadku wi\u0119kszo\u015bci witryn konieczne jest znalezienie informacji o geolokalizacji i kraju u\u017cytkownika. Prawdopodobnie musisz pokaza\u0107 r\u00f3\u017cne tre\u015bci w zale\u017cno\u015bci od kraju u\u017cytkownika, pokazywa\u0107 r\u00f3\u017cne ceny zgodnie z kodami walut kraju itp. W tych scenariuszach musisz znale\u017a\u0107 geolokalizacj\u0119 u\u017cytkownika i odpowiednio wy\u015bwietla\u0107 tre\u015bci.<\/p>\n<p>W tym artykule poka\u017c\u0119, jak znale\u017a\u0107 geolokalizacj\u0119 za pomoc\u0105 adresu IP u\u017cytkownika w PHP. B\u0119dziemy korzysta\u0107 z us\u0142ugi <a href=\"https:\/\/ipgeolocationapi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">IP Geolokalizacja API,<\/a> kt\u00f3ra jest ca\u0142kowicie bezp\u0142atna.<\/p>\n<h3>Uzyskaj geolokalizacj\u0119 za pomoc\u0105 adresu IP<\/h3>\n<p>W PHP mo\u017cemy skorzysta\u0107 z us\u0142ugi 'IP Geolocation API&#8217; poprzez cURL i Guzzle. Oba s\u0105 popularne do wywo\u0142ywania zewn\u0119trznych us\u0142ug API i uzyskiwania z nich odpowiedzi. W zale\u017cno\u015bci od przep\u0142ywu projektu mo\u017cesz u\u017cy\u0107 cURL lub Guzzle. W obu przypadkach najpierw musimy uzyska\u0107 adres IP u\u017cytkownika. Napisz wi\u0119c poni\u017csz\u0105 metod\u0119, kt\u00f3ra zwr\u00f3ci adres IP.<\/p>\n<pre><code>&lt;?php\n\/\/ get user's IP address\nfunction getUserIpAddr() {\n\u00a0\u00a0\u00a0\u00a0if (!empty($_SERVER['HTTP_CLIENT_IP'])) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['HTTP_CLIENT_IP'];\n\u00a0\u00a0\u00a0\u00a0} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['REMOTE_ADDR'];\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0return $ip;\n}<\/code><\/pre>\n<h4>Korzystanie z cURL<\/h4>\n<p>cURL jest domy\u015blnie dostarczany z instalacj\u0105 PHP. Nie ma potrzeby instalowania \u017cadnego pakietu osobno. Musisz tylko upewni\u0107 si\u0119, \u017ce jest w\u0142\u0105czony na twoim serwerze, zanim go u\u017cyjesz.<\/p>\n<p>Za po\u015brednictwem cURL nawi\u0105\u017cemy po\u0142\u0105czenie z punktem ko\u0144cowym \u201eAPI Geolokalizacji IP&quot;, podaj\u0105c adres IP u\u017cytkownika i wydrukujemy odpowied\u017a.<\/p>\n<pre><code>&lt;?php\n$ip_address = getUserIpAddr();\n\u00a0\u00a0\n$url = \"https:\/\/api.ipgeolocationapi.com\/geolocate\/$ip_address\";\n$ch = curl_init();\u00a0 \ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($ch, CURLOPT_URL, $url);\n$response = curl_exec($ch);\n$arr_result = json_decode($response);\nprint_r($arr_result);<\/code><\/pre>\n<p>Otrzymasz dane wyj\u015bciowe w formacie JSON, jak poni\u017cej.<\/p>\n<pre><code>{\n   \"continent\": \"Asia\",\n   \"address_format\": \"{{recipient}}n{{street}}n{{region}}n{{city}} {{postalcode}}n{{country}}\",\n   \"alpha2\": \"IN\",\n   \"alpha3\": \"IND\",\n   \"country_code\": \"91\",\n   \"international_prefix\": \"00\",\n   \"ioc\": \"IND\",\n   \"gec\": \"IN\",\n   \"name\": \"India\",\n   \"national_destination_code_lengths\": [\n     2\n   ],\n   \"national_number_lengths\": [\n     10\n   ],\n   \"national_prefix\": \"0\",\n   \"number\": \"356\",\n   \"region\": \"Asia\",\n   \"subregion\": \"Southern Asia\",\n   \"world_region\": \"APAC\",\n   \"un_locode\": \"IN\",\n   \"nationality\": \"Indian\",\n   \"postal_code\": true,\n   \"unofficial_names\": [\n     \"India\",\n     \"Indien\",\n     \"Inde\",\n     \"\u30a4\u30f3\u30c9\"\n   ],\n   \"languages_official\": [\n     \"hi\",\n     \"en\"\n   ],\n   \"languages_spoken\": [\n     \"hi\",\n     \"en\"\n   ],\n   \"geo\": {\n     \"latitude\": 20.593684,\n     \"latitude_dec\": \"23.4060115814209\",\n     \"longitude\": 78.96288,\n     \"longitude_dec\": \"79.45809173583984\",\n     \"max_latitude\": 35.5087008,\n     \"max_longitude\": 97.3953587,\n     \"min_latitude\": 6.4626999,\n     \"min_longitude\": 68.1097,\n     \"bounds\": {\n       \"northeast\": {\n         \"lat\": 35.5087008,\n         \"lng\": 97.3953587\n       },\n       \"southwest\": {\n         \"lat\": 6.4626999,\n         \"lng\": 68.1097\n       }\n     }\n   },\n   \"currency_code\": \"INR\",\n   \"start_of_week\": \"monday\"\n }<\/code><\/pre>\n<h4>Korzystanie Guzzle<\/h4>\n<p><a href=\"https:\/\/docs.guzzlephp.org\/en\/latest\/overview.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> to klient PHP HTTP do wysy\u0142ania \u017c\u0105da\u0144 HTTP. Jest alternatyw\u0105 dla cURL. Zapewnia du\u017co czystego kodu i lepsze wra\u017cenia dla programist\u00f3w.<\/p>\n<p>Najpierw musisz zainstalowa\u0107 Guzzle za pomoc\u0105 Kompozytora, uruchamiaj\u0105c polecenie:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Nast\u0119pnie napisz poni\u017cszy kod, kt\u00f3ry wywo\u0142uje API przez Guzzle.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$ip_address = getUserIpAddr();\n\u00a0\u00a0\n$client = new Client();\n\u00a0\u00a0\n$response = $client-&gt;request('GET', 'https:\/\/api.ipgeolocationapi.com\/geolocate\/'.$ip_address);\n\u00a0\u00a0\nif($response-&gt;getStatusCode() == 200) {\n\u00a0\u00a0\u00a0\u00a0$body = $response-&gt;getBody();\n\u00a0\u00a0\u00a0\u00a0$arr_body = json_decode($body);\n\u00a0\u00a0\u00a0\u00a0print_r($arr_body);\n}<\/code><\/pre>\n<p>W ten spos\u00f3b uzyskujemy geolokalizacj\u0119 za pomoc\u0105 adresu IP w PHP. Podziel si\u0119 swoimi przemy\u015bleniami lub sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/biblioteka-laravel-geoip-znajdz-geolokalizacje-za-pomoca-adresu-ip\/\" title=\"Biblioteka Laravel Geoip \u2013 znajd\u017a geolokalizacj\u0119 za pomoc\u0105 adresu IP\">Biblioteka Laravel Geoip \u2013 znajd\u017a geolokalizacj\u0119 za pomoc\u0105 adresu IP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-uzyskac-geolokalizacje-z-adresu-ip-w-php\/\" title=\"Jak uzyska\u0107 geolokalizacj\u0119 z adresu IP w PHP\">Jak uzyska\u0107 geolokalizacj\u0119 z adresu IP w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-korzystac-z-guzzle-klienta-php-http-do-wysylania-zadan-http\/\" title=\"Jak korzysta\u0107 z Guzzle \u2013 klienta PHP HTTP do wysy\u0142ania \u017c\u0105da\u0144 HTTP\">Jak korzysta\u0107 z Guzzle \u2013 klienta PHP HTTP do wysy\u0142ania \u017c\u0105da\u0144 HTTP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czasami musimy znale\u017a\u0107 geolokalizacj\u0119 u\u017cytkownika, aby wy\u015bwietla\u0107 r\u00f3\u017cne tre\u015bci w zale\u017cno\u015bci od kraju. W tym artykule pokazujemy, jak zdoby\u0107<\/p>\n","protected":false},"author":1,"featured_media":21605,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[277],"tags":[847],"class_list":["post-29758","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29758"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29758\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21605"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}