তাদের আইপি থেকে দর্শকদের দেশ পাচ্ছেন


220

আমি দর্শকদের দেশগুলিকে তাদের আইপির মাধ্যমে পেতে চাই ... এখনই আমি এটি ব্যবহার করছি ( http://api.hostip.info/country.php?ip= ......)

আমার কোডটি এখানে:

<?php

if (isset($_SERVER['HTTP_CLIENT_IP']))
{
    $real_ip_adress = $_SERVER['HTTP_CLIENT_IP'];
}

if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
    $real_ip_adress = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
    $real_ip_adress = $_SERVER['REMOTE_ADDR'];
}

$cip = $real_ip_adress;
$iptolocation = 'http://api.hostip.info/country.php?ip=' . $cip;
$creatorlocation = file_get_contents($iptolocation);

?>

ঠিক আছে, এটি সঠিকভাবে কাজ করছে, তবে বিষয়টি হ'ল এটি মার্কিন যুক্তরাষ্ট্র বা সিএর মতো দেশের কোডটি দেয় এবং আমেরিকা যুক্তরাষ্ট্র বা কানাডার মতো পুরো দেশের নাম দেয় না।

সুতরাং, হোস্টিপ.ইনফো এর কোনও ভাল বিকল্প রয়েছে কি?

আমি জানি যে আমি কেবল এমন কিছু কোড লিখতে পারি যা শেষ পর্যন্ত এই দুটি অক্ষর পুরো দেশের নামে বদলে দেবে, তবে আমি এমন একটি কোড লিখতে খুব অলস করছি যাতে সমস্ত দেশ রয়েছে ...

পিএস: কোন কারণে আমি কোনও রেডিমেড সিএসভি ফাইল বা এমন কোনও কোড ব্যবহার করতে চাই না যা আমার কাছে এই তথ্যটি দখল করবে, ip2country রেডিমেড কোড এবং সিএসভি এর মতো কিছু।


20
অলস হবেন না, এমন অনেকগুলি দেশ নেই এবং দেশের নামগুলিতে এফআইএস 2 টি অক্ষরের কোডের জন্য একটি অনুবাদ টেবিল পাওয়া খুব কঠিন নয়।
ক্রিস হেনরি

ম্যাক্সমাইন্ড জিওআইপি বৈশিষ্ট্যটি ব্যবহার করুন। এটি ফলাফলের মধ্যে দেশের নাম অন্তর্ভুক্ত করবে। maxmind.com/app/php
Tchoupi

আপনার প্রথম নিয়োগটি $real_ip_addressসর্বদা উপেক্ষা করা হয়। যাইহোক, মনে রাখবেন যে X-Forwarded-Forএইচটিটিপি শিরোনামটি খুব সহজেই নকল হতে পারে এবং www.hidemyass.com এর মতো প্রক্সি রয়েছে
ওয়াল্টার ট্রস

5
আইপিএলওক.টিও একটি ফ্রি এপিআই সরবরাহ করে: https://www.iplocate.io/api/lookup/8.8.8.8- অস্বীকৃতি: আমি এই পরিষেবাটি চালাই।
ttarik

আমি ইপ্রিগ্রিস্ট্রি : api.ipregistry.co/… এ চেষ্টা করার পরামর্শ দিই (দাবি অস্বীকার: আমি পরিষেবাটি চালাই)।
লরেন্ট

উত্তর:


495

এই সহজ পিএইচপি ফাংশন চেষ্টা করুন।

<?php

function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
    $output = NULL;
    if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
        $ip = $_SERVER["REMOTE_ADDR"];
        if ($deep_detect) {
            if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
    }
    $purpose    = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
    $support    = array("country", "countrycode", "state", "region", "city", "location", "address");
    $continents = array(
        "AF" => "Africa",
        "AN" => "Antarctica",
        "AS" => "Asia",
        "EU" => "Europe",
        "OC" => "Australia (Oceania)",
        "NA" => "North America",
        "SA" => "South America"
    );
    if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
        $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
        if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
            switch ($purpose) {
                case "location":
                    $output = array(
                        "city"           => @$ipdat->geoplugin_city,
                        "state"          => @$ipdat->geoplugin_regionName,
                        "country"        => @$ipdat->geoplugin_countryName,
                        "country_code"   => @$ipdat->geoplugin_countryCode,
                        "continent"      => @$continents[strtoupper($ipdat->geoplugin_continentCode)],
                        "continent_code" => @$ipdat->geoplugin_continentCode
                    );
                    break;
                case "address":
                    $address = array($ipdat->geoplugin_countryName);
                    if (@strlen($ipdat->geoplugin_regionName) >= 1)
                        $address[] = $ipdat->geoplugin_regionName;
                    if (@strlen($ipdat->geoplugin_city) >= 1)
                        $address[] = $ipdat->geoplugin_city;
                    $output = implode(", ", array_reverse($address));
                    break;
                case "city":
                    $output = @$ipdat->geoplugin_city;
                    break;
                case "state":
                    $output = @$ipdat->geoplugin_regionName;
                    break;
                case "region":
                    $output = @$ipdat->geoplugin_regionName;
                    break;
                case "country":
                    $output = @$ipdat->geoplugin_countryName;
                    break;
                case "countrycode":
                    $output = @$ipdat->geoplugin_countryCode;
                    break;
            }
        }
    }
    return $output;
}

?>

ব্যবহারবিধি:

উদাহরণ 1: দর্শনার্থীর আইপি ঠিকানার বিবরণ পান

<?php

echo ip_info("Visitor", "Country"); // India
echo ip_info("Visitor", "Country Code"); // IN
echo ip_info("Visitor", "State"); // Andhra Pradesh
echo ip_info("Visitor", "City"); // Proddatur
echo ip_info("Visitor", "Address"); // Proddatur, Andhra Pradesh, India

print_r(ip_info("Visitor", "Location")); // Array ( [city] => Proddatur [state] => Andhra Pradesh [country] => India [country_code] => IN [continent] => Asia [continent_code] => AS )

?>

উদাহরণ 2: যে কোনও আইপি ঠিকানার বিবরণ পান। [আইপিভি 4 এবং আইপিভি 6 সমর্থন করুন]

<?php

echo ip_info("173.252.110.27", "Country"); // United States
echo ip_info("173.252.110.27", "Country Code"); // US
echo ip_info("173.252.110.27", "State"); // California
echo ip_info("173.252.110.27", "City"); // Menlo Park
echo ip_info("173.252.110.27", "Address"); // Menlo Park, California, United States

print_r(ip_info("173.252.110.27", "Location")); // Array ( [city] => Menlo Park [state] => California [country] => United States [country_code] => US [continent] => North America [continent_code] => NA )

?>

1
আমি কেন প্রতিটি আইপি সহ সমস্ত সময় অজান্তে থাকি? , একই কোড ব্যবহৃত।
প্রতিধ্বনি_মে

1
আপনি সম্ভবত "অজানা" পান কারণ আপনার সার্ভারটি অনুমতি দেয় না file_get_contents()। কেবল আপনার ত্রুটি_লগ ফাইলটি পরীক্ষা করুন। কার্যকরী: আমার উত্তর দেখুন।
কাই নোক

3
এছাড়াও এটি হতে পারে কারণ আপনি এটি
স্থানীয়ভাবে

1
একটি নির্ধারিত সময়ের জন্য ফলাফলগুলি ক্যাশে করতে ভুলবেন না। এছাড়াও, একটি নোট হিসাবে, কোনও তথ্য পাওয়ার জন্য আপনার আর কোনও ওয়েবসাইটের উপর নির্ভর করা উচিত নয়, ওয়েবসাইটটি নীচে নামতে পারে, পরিষেবাটি বন্ধ হয়ে যেতে পারে ইত্যাদি And
মেশিনাদিক্ট

1
অনুসরণ করুন: লোকালহোস্টে কোনও সাইট টেস্ট করার সময় এটি একটি সমস্যা। পরীক্ষার উদ্দেশ্যে ঠিক করার কোনও উপায়? স্ট্যান্ডার্ড 127.0.0.1 লোকালহোস্ট আইপি ব্যবহার করুন
নিক

54

আপনি http://www.geoplugin.net/ থেকে একটি সাধারণ এপিআই ব্যবহার করতে পারেন

$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr());
echo $xml->geoplugin_countryName ;


echo "<pre>";
foreach ($xml as $key => $value)
{
    echo $key , "= " , $value ,  " \n" ;
}
echo "</pre>";

ফাংশন ব্যবহৃত

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

আউটপুট

United States
geoplugin_city= San Antonio
geoplugin_region= TX
geoplugin_areaCode= 210
geoplugin_dmaCode= 641
geoplugin_countryCode= US
geoplugin_countryName= United States
geoplugin_continentCode= NA
geoplugin_latitude= 29.488899230957
geoplugin_longitude= -98.398696899414
geoplugin_regionCode= TX
geoplugin_regionName= Texas
geoplugin_currencyCode= USD
geoplugin_currencySymbol= $
geoplugin_currencyConverter= 1

এটি আপনাকে এমন অনেকগুলি বিকল্প দেয় যা আপনি চারপাশে খেলতে পারেন

ধন্যবাদ

:)


1
এটা দারুন. তবে এখানে পরীক্ষার সময় নিম্নলিখিত ক্ষেত্রগুলিতে কোনও মূল্য নেই "জিওপ্লাগিন_সিটি, জিওপ্লুগিন_গ্রিওন, জিওপ্লাগিন_গ্রেইনকোড, জিওপ্লুগিন_গ্রেশননাম" .. কারণ কী? কোন সমাধান আছে কি? অগ্রিম ধন্যবাদ
WebDevRon

31

আমি চন্দ্রের উত্তর চেষ্টা করেছি কিন্তু আমার সার্ভার কনফিগারেশন ফাইল_জেট_কন্টেন্টস () এর অনুমতি দেয় না

PHP Warning: file_get_contents() URL file-access is disabled in the server configuration

আমি চন্দ্রের কোডটি পরিবর্তন করেছি যাতে এটি সিআরএল ব্যবহার করে এমন সার্ভারগুলির জন্যও কাজ করে:

function ip_visitor_country()
{

    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];
    $country  = "Unknown";

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.geoplugin.net/json.gp?ip=".$ip);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $ip_data_in = curl_exec($ch); // string
    curl_close($ch);

    $ip_data = json_decode($ip_data_in,true);
    $ip_data = str_replace('&quot;', '"', $ip_data); // for PHP 5.2 see stackoverflow.com/questions/3110487/

    if($ip_data && $ip_data['geoplugin_countryName'] != null) {
        $country = $ip_data['geoplugin_countryName'];
    }

    return 'IP: '.$ip.' # Country: '.$country;
}

echo ip_visitor_country(); // output Coutry name

?>

আশা করি এইটি কাজ করবে ;-)


1
তাদের সাইটে থাকা ডক্স অনুসারে: "যদি জিওপ্লাগিন.টাইন পুরোপুরি সাড়া দিচ্ছিল, তবে থামতে হবে, তবে আপনি প্রতি মিনিটে 120 টি অনুরোধের বিনামূল্যে দেখার সীমাটি ছাড়িয়ে গেছেন" "
রিক হেলওয়েল

সুন্দর কাজ করেছেন। ধন্যবাদ!
নাজিব


11

ম্যাক্সমাইন্ড জিওআইপি ব্যবহার করুন (বা যদি আপনি অর্থ প্রদানের জন্য প্রস্তুত না হন তবে জিওআইপিলাইট)।

$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);

@ জয়েস: আমি ম্যাক্সমাইন্ড এপিআই এবং ডিবি ব্যবহার করার চেষ্টা করেছি, তবে কেন এটি আমার পক্ষে কাজ করে না জানি না, আসলে এটি সাধারণভাবে কাজ করে, তবে উদাহরণস্বরূপ যখন আমি এই $ _SSERVER ['REMOTE_ADDR'] চালাচ্ছি; এটি আমাকে দেখায় এই আইপি: 10.48.44.43, কিন্তু আমি যখন এটি জিওআইপি_কাউন্ট্রি_কোড_বি_এডিডিআর ($ জিআই, আইপি) ব্যবহার করি, এটি কোনও কিছুই দেয় না, কোনও ধারণা?
mOna

এটি একটি সংরক্ষিত আইপি ঠিকানা (আপনার স্থানীয় নেটওয়ার্ক থেকে অভ্যন্তরীণ আইপি ঠিকানা)। রিমোট সার্ভারে কোড চালানোর চেষ্টা করুন।
জয়েস বাবু


10

কোড জিপিএল থেকে পিএইচপি-আইপি-টু-দেশ পরীক্ষা করে দেখুন । তারা যে ডেটাবেস সরবরাহ করে তা প্রতিদিন আপডেট হয়, তাই যদি আপনি নিজের এসকিউএল সার্ভারটি হোস্ট করেন তবে চেকের জন্য বাইরের সার্ভারের সাথে সংযোগ স্থাপন করার প্রয়োজন নেই। সুতরাং কোডটি ব্যবহার করে আপনাকে কেবল টাইপ করতে হবে:

<?php
$ip = $_SERVER['REMOTE_ADDR'];

if(!empty($ip)){
        require('./phpip2country.class.php');

        /**
         * Newest data (SQL) avaliable on project website
         * @link http://code.google.com/p/php-ip-2-country/
         */
        $dbConfigArray = array(
                'host' => 'localhost', //example host name
                'port' => 3306, //3306 -default mysql port number
                'dbName' => 'ip_to_country', //example db name
                'dbUserName' => 'ip_to_country', //example user name
                'dbUserPassword' => 'QrDB9Y8CKMdLDH8Q', //example user password
                'tableName' => 'ip_to_country', //example table name
        );

        $phpIp2Country = new phpIp2Country($ip,$dbConfigArray);
        $country = $phpIp2Country->getInfo(IP_COUNTRY_NAME);
        echo $country;
?>

উদাহরণ কোড (সংস্থান থেকে)

<?
require('phpip2country.class.php');

$dbConfigArray = array(
        'host' => 'localhost', //example host name
        'port' => 3306, //3306 -default mysql port number
        'dbName' => 'ip_to_country', //example db name
        'dbUserName' => 'ip_to_country', //example user name
        'dbUserPassword' => 'QrDB9Y8CKMdLDH8Q', //example user password
        'tableName' => 'ip_to_country', //example table name
);

$phpIp2Country = new phpIp2Country('213.180.138.148',$dbConfigArray);

print_r($phpIp2Country->getInfo(IP_INFO));
?>

আউটপুট

Array
(
    [IP_FROM] => 3585376256
    [IP_TO] => 3585384447
    [REGISTRY] => RIPE
    [ASSIGNED] => 948758400
    [CTRY] => PL
    [CNTRY] => POL
    [COUNTRY] => POLAND
    [IP_STR] => 213.180.138.148
    [IP_VALUE] => 3585378964
    [IP_FROM_STR] => 127.255.255.255
    [IP_TO_STR] => 127.255.255.255
)

4
আমাদের কাজ করতে ডাটাবেস তথ্য দিতে হবে? ভাল মনে হচ্ছে না।
প্রতিধ্বনি_মে

10

আমরা ব্যবহারকারীর আইপি ঠিকানা ব্যবহার করে অবস্থানটি পেতে জিওবাইটস ডট কম ব্যবহার করতে পারি

$user_ip = getIP();
$meta_tags = get_meta_tags('http://www.geobytes.com/IPLocator.htm?GetLocation&template=php3.txt&IPAddress=' . $user_ip);
echo '<pre>';
print_r($meta_tags);

এটি এর মতো ডেটা ফেরত দেবে

Array(
    [known] => true
    [locationcode] => USCALANG
    [fips104] => US
    [iso2] => US
    [iso3] => USA
    [ison] => 840
    [internet] => US
    [countryid] => 254
    [country] => United States
    [regionid] => 126
    [region] => California
    [regioncode] => CA
    [adm1code] =>     
    [cityid] => 7275
    [city] => Los Angeles
    [latitude] => 34.0452
    [longitude] => -118.2840
    [timezone] => -08:00
    [certainty] => 53
    [mapbytesremaining] => Free
)

ব্যবহারকারী আইপি পেতে ফাংশন

function getIP(){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
    $pattern = "/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/";
    if(preg_match($pattern, $_SERVER["HTTP_X_FORWARDED_FOR"])){
            $userIP = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }else{
            $userIP = $_SERVER["REMOTE_ADDR"];
    }
}
else{
  $userIP = $_SERVER["REMOTE_ADDR"];
}
return $userIP;
}

আমি আপনার কোডটি চেষ্টা করেছি, এটি আমার জন্য এটি প্রদান করে: অ্যারে ([পরিচিত] => মিথ্যা)
এমওনা

যখন আমি এটি চেষ্টা করি:; ip = $ _SERVER ["REMOTE_ADDR"]; প্রতিধ্বনি $ ip; এটি এটিকে ফেরত দেয়: 10.48.44.43, আপনি কি সমস্যা জানেন জানেন ?? আমি আলস্পো ম্যাক্সমাইন্ড জিওআইপি ব্যবহার করেছি এবং যখন আমি জিওআইপি_কাউন্ট্রি_নাম_বাই_এডিডিআর ($ জিআই, আইপি) ব্যবহার করি তখন তা আমাকে কিছুই ফিরিয়ে দেয় ...
mOna

@ এমওনা, এটি আপনার আইপি ঠিকানাটি ফিরিয়ে দেয়। আরও বিবরণ জন্য, আপনার কোড শেয়ার করুন।
রাম শর্মা

আমি দেখতে পেয়েছি যে সমস্যাটি আমার আইপিতে প্রকাশিত হয়েছে কারণ এটি ব্যক্তিগত নেটওয়ার্কের জন্য। তারপরে আমি আমার আসল আইপিটিকে ইফকনফাইগের মধ্যে পেয়েছি এবং এটি আমার প্রোগ্রামে ব্যবহার করেছি। তারপরে এটি কাজ করেছিল :) এখন, আমার প্রশ্নটি হ'ল আমার মতো ব্যবহারকারীদের ক্ষেত্রে কীভাবে আসল আইপি পাবেন? : (যদি তারা স্থানীয় আইপি ব্যবহার করুন) .. আমি আমার কোড এখানে লিখেছিলেন stackoverflow.com/questions/25958564/...
মোনা

9

এই সাধারণ একটি লাইন কোডটি ব্যবহার করে দেখুন, আপনি তাদের আইপি দূরবর্তী ঠিকানা থেকে দেশ এবং দর্শকদের দেশ পাবেন।

$tags = get_meta_tags('http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress=' . $_SERVER['REMOTE_ADDR']);
echo $tags['country'];
echo $tags['city'];

9

আপনি এ থেকে একটি ওয়েব-পরিষেবা ব্যবহার করতে পারেন
আপনার পিএইচপি কোডে http://ip-api.com হিসাবে করুন:

<?php
$ip = $_REQUEST['REMOTE_ADDR']; // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
  echo 'Hello visitor from '.$query['country'].', '.$query['city'].'!';
} else {
  echo 'Unable to get location';
}
?>

ক্যোয়ারিতে আরও অনেক তথ্য রয়েছে:

array (
  'status'      => 'success',
  'country'     => 'COUNTRY',
  'countryCode' => 'COUNTRY CODE',
  'region'      => 'REGION CODE',
  'regionName'  => 'REGION NAME',
  'city'        => 'CITY',
  'zip'         => ZIP CODE,
  'lat'         => LATITUDE,
  'lon'         => LONGITUDE,
  'timezone'    => 'TIME ZONE',
  'isp'         => 'ISP NAME',
  'org'         => 'ORGANIZATION NAME',
  'as'          => 'AS NUMBER / NAME',
  'query'       => 'IP ADDRESS USED FOR QUERY',
)

Ip-api.com ব্যবহার করা হয়েছে কারণ তারা আইএসপি নাম সরবরাহ করে!
রিচার্ড টিঙ্কলার

1
আমি ব্যবহার করেছি কারণ তারা টাইমজোন সরবরাহ করে
রায় শোয়া

8

পার্ল সম্প্রদায়টি এখানে রক্ষণাবেক্ষণ করে আইপি-> দেশ ডাটাবেসের একটি ভালভাবে পরিচালিত ফ্ল্যাট-ফাইল সংস্করণ রয়েছে CPAN

এই ফাইলগুলিতে অ্যাক্সেসের জন্য একটি ডেটাসভার দরকার হয় না এবং ডেটা নিজেই প্রায় 515k

এই ডেটাতে কথা বলতে হিজিমারু একটি পিএইচপি র‌্যাপার লিখেছেন: পিএইচপি-আইপি-দেশ-দ্রুত


6

এটি করার বিভিন্ন উপায় ...

সমাধান # 1:

তৃতীয় পক্ষের যে পরিষেবাটি আপনি ব্যবহার করতে পারেন তা হ'ল http://ipinfodb.com । তারা হোস্টনাম, ভূ-অবস্থান এবং অতিরিক্ত তথ্য সরবরাহ করে।

এখানে একটি API কী জন্য নিবন্ধন করুন: http://ipinfodb.com/register.php । এটি আপনাকে তাদের সার্ভার থেকে ফলাফল পুনরুদ্ধার করতে অনুমতি দেবে, এটি ছাড়া এটি কাজ করবে না।

নিম্নলিখিত পিএইচপি কোডটি অনুলিপি করুন এবং অতীত করুন:

$ipaddress = $_SERVER['REMOTE_ADDR'];
$api_key = 'YOUR_API_KEY_HERE';

$data = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=$api_key&ip=$ipaddress&format=json");
$data = json_decode($data);
$country = $data['Country'];

downside:

তাদের ওয়েবসাইট থেকে উদ্ধৃতি:

আমাদের ফ্রি এপিআই আইপি 2 লোকেশন লাইট সংস্করণ ব্যবহার করছে যা কম নির্ভুলতা সরবরাহ করে।

সমাধান # 2:

এই ফাংশনটি http://www.netip.de/ পরিষেবা ব্যবহার করে দেশের নাম ফিরিয়ে দেবে ।

$ipaddress = $_SERVER['REMOTE_ADDR'];
function geoCheckIP($ip)
{
    $response=@file_get_contents('http://www.netip.de/search?query='.$ip);

    $patterns=array();
    $patterns["country"] = '#Country: (.*?)&nbsp;#i';

    $ipInfo=array();

    foreach ($patterns as $key => $pattern)
    {
        $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found';
    }

        return $ipInfo;
}

print_r(geoCheckIP($ipaddress));

আউটপুট:

Array ( [country] => DE - Germany )  // Full Country Name

3
তাদের ওয়েবসাইট থেকে উদ্ধৃত: "আপনি প্রতিদিন 1000 টি এপিআই অনুরোধের মধ্যে সীমাবদ্ধ you
ওয়াল্টার ট্রস

আমি এটি আমার ব্যক্তিগত ওয়েবসাইটে ব্যবহার করেছি তাই সে কারণেই আমি এটি পোস্ট করেছি। তথ্যের জন্য আপনাকে ধন্যবাদ ... এটি বুঝতে পারেনি। আমি পোস্টে আরও অনেক প্রচেষ্টা করেছি, তাই আপডেট পোস্টটি দয়া করে দেখুন :)
imbondbaby

@ বিম্বন্ডবাবি: হাই, আমি আপনার কোডটি চেষ্টা করেছিলাম, তবে আমার জন্য এটি এটি ফিরিয়ে দেয়: অ্যারে ([দেশ] => -), যখন আমি এটি মুদ্রণ করার চেষ্টা করি তখন থেকে আমি সমস্যাটি বুঝতে পারি না: ip আইপ্যাড্রেস = $ _S সারওয়ার ['রেমোট_এডিডিআর' ]; এটি আমাকে এই আইপিটি দেখায়: 10.48.44.43, আমি বুঝতে পারি না কেন এই আইপিটি কাজ করে না! আমি যেখানেই এই নম্বরটি thisোকাতে চাইছি তা কোনও দেশে ফিরে আসে না !!! তুমি আমাকে সাহায্য করবে?
মোনা

5

আমার পরিষেবা ipdata.co 5 টি ভাষায় দেশের নাম সরবরাহ করে! পাশাপাশি সংস্থা, মুদ্রা, টাইমজোন, কলিং কোড, পতাকা, মোবাইল ক্যারিয়ার ডেটা, প্রক্সি ডেটা এবং টোর প্রস্থান নোডের স্থিতির ডেটা যে কোনও আইভিভি 4 বা আইপিভি 6 ঠিকানা থেকে রয়েছে।

এই উত্তরটি একটি 'পরীক্ষা' API কী ব্যবহার করে যা অত্যন্ত সীমাবদ্ধ এবং কেবল কয়েকটি কল পরীক্ষার জন্য বোঝানো হয়। আপনার নিজের ফ্রি এপিআই কী এর জন্য সাইনআপ করুন এবং বিকাশের জন্য প্রতিদিন 1500 টি অনুরোধ পান।

এটি বিশ্বের 10 টি অঞ্চলে প্রতিটি সেকেন্ডে 10,000 ডলার অনুরোধ পরিচালনা করতে সক্ষম হওয়ায় এটি অত্যন্ত স্কেলেবল!

বিকল্পগুলির মধ্যে রয়েছে; ইংরাজী (এন), জার্মান (ডি), জাপানি (জা), ফরাসী (ফরাসী ভাষায়) এবং সরলীকৃত চাইনিজ (za-CH)

$ip = '74.125.230.195';
$details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}?api-key=test"));
echo $details->country_name;
//United States
echo $details->city;
//Mountain View
$details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}?api-key=test/zh-CN"));
echo $details->country_name;
//美国

1
আল্লাহ তোমাকে মঙ্গল করুন, মানুষ! আমি যা চেয়েছি তার চেয়ে বেশি পেয়েছি! দ্রুত প্রশ্ন: আমি কি এটি প্রোডের জন্য ব্যবহার করতে পারি? মানে, আপনি তাড়াতাড়ি যে কোনও সময় তা নামিয়ে আনবেন না, আপনি?
সৈয়দ

1
মোটেও নয় :) আমি আসলে আরও অঞ্চল এবং আরও বেশি পোলিশ যুক্ত করছি। খুশি হলেন যে আপনি এটি সহায়তার জন্য পেয়েছেন :)
জোনাথন

খুব সহায়ক, বিশেষত অতিরিক্ত প্যারামের সাহায্যে আমার একাধিক সমস্যার সমাধান!
সৈয়দ

3
ইতিবাচক প্রতিক্রিয়ার জন্য ধন্যবাদ! আমি এই জাতীয় একটি সরঞ্জামের জন্য সর্বাধিক সাধারণ ব্যবহারের কেসগুলি তৈরি করেছি, লক্ষ্য ছিল ভৌগলিক অবস্থানের পরে কোনও অতিরিক্ত প্রক্রিয়াজাতকরণ বন্ধ করা, ব্যবহারকারীদের জন্য এই অর্থ প্রদান দেখে খুশি
জোনাথন

4

এটি কোনও নতুন পরিষেবা কিনা তা নিশ্চিত নন তবে এখন (২০১)) পিএইচপি-র সবচেয়ে সহজ উপায় হ'ল জিওপ্লাগিনের পিএইচপি ওয়েব পরিষেবা ব্যবহার করা: http://www.geoplugin.net/php.gp :

বেসিক ব্যবহার:

// GET IP ADDRESS
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (!empty($_SERVER['REMOTE_ADDR'])) {
    $ip = $_SERVER['REMOTE_ADDR'];
} else {
    $ip = false;
}

// CALL THE WEBSERVICE
$ip_info = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip));

তারা একটি তৈরি বিল্ট ক্লাসও সরবরাহ করে: http://www.geoplugin.com/_media/webservices/geoplugin.class.php.tgz?id=webservices%3Aphp&cache=cache


আপনি এমন একটি ব্যবহার করেছেন যার elseপরে elseএকটি ত্রুটি ঘটায়। আপনি কী আটকাতে চেষ্টা করেছেন? REMOTE_ADDR সব সময় পাওয়া উচিত?
অ্যালেক্সিওয়ে

@ ভাইয়া - সম্ভবত এটি হওয়া উচিত তবে আপনি কখনই জানেন না।
বিলেন্নো

এমন কোনও মামলা রয়েছে যেখানে এটি আপনি জানেন না?
অ্যালেক্সিওয়ে

2
@ ভাইয়া - পিএইচপি ডকস থেকে এখানে $_SERVER: "এখানে কোনও গ্যারান্টি নেই যে প্রতিটি ওয়েব সার্ভার এগুলির কোনও সরবরাহ করবে; সার্ভারগুলি কিছু বাদ দিতে পারে বা এখানে তালিকাভুক্ত নয় এমন অন্যদের সরবরাহ করতে পারে।"
বিলেণোহ

1
নোট করুন অনুরোধের একটি সীমা আছে; তাদের সাইট থেকে: "জিওপ্লাগিন ডট যদি পুরোপুরি প্রতিক্রিয়া জানায়, তবে থামিয়ে দেওয়া হয়, তবে আপনি প্রতি মিনিটে 120 টি অনুরোধের ফ্রি দেখার সীমাটি ছাড়িয়ে গেছেন Hel"
রিক হেলওয়েল

2

আমি ipinfodb.comএপিআই ব্যবহার করছি এবং ঠিক আপনি যা খুঁজছেন তা পাচ্ছি ।

এটি সম্পূর্ণ নিখরচায়, আপনার এপিআই কী পেতে আপনাকে কেবল তাদের সাথে নিবন্ধন করতে হবে। আপনি তাদের ওয়েবসাইট থেকে ডাউনলোড করে তাদের পিএইচপি ক্লাস অন্তর্ভুক্ত করতে পারেন বা আপনি তথ্য পুনরুদ্ধারের জন্য ইউআরএল ফর্ম্যাট ব্যবহার করতে পারেন।

আমি যা করছি তা এখানে:

আমি আমার স্ক্রিপ্টে এবং নীচের কোডটি ব্যবহার করে তাদের পিএইচপি ক্লাস অন্তর্ভুক্ত করেছি:

$ipLite = new ip2location_lite;
$ipLite->setKey('your_api_key');
if(!$_COOKIE["visitorCity"]){ //I am using cookie to store information
  $visitorCity = $ipLite->getCity($_SERVER['REMOTE_ADDR']);
  if ($visitorCity['statusCode'] == 'OK') {
    $data = base64_encode(serialize($visitorCity));
    setcookie("visitorCity", $data, time()+3600*24*7); //set cookie for 1 week
  }
}
$visitorCity = unserialize(base64_decode($_COOKIE["visitorCity"]));
echo $visitorCity['countryName'].' Region'.$visitorCity['regionName'];

এটাই.


2

আপনি আইপি ঠিকানার বিবরণ পেতে http://ipinfo.io/ ব্যবহার করতে পারেন এর ব্যবহার সহজ।

<?php
    function ip_details($ip)
    {
    $json = file_get_contents("http://ipinfo.io/{$ip}");
    $details = json_decode($json);
    return $details;
    }

    $details = ip_details(YoUR IP ADDRESS); 

    echo $details->city;
    echo "<br>".$details->country; 
    echo "<br>".$details->org; 
    echo "<br>".$details->hostname; /

    ?>

2

127.0.0.1দর্শকদের আইপিএড্রেস দিয়ে প্রতিস্থাপন করুন ।

$country = geoip_country_name_by_name('127.0.0.1');

নগরী, রাজ্য, দেশ, দ্রাঘিমাংশ, অক্ষাংশ ইত্যাদি কীভাবে প্রাপ্ত করবেন তা জানার জন্য ইনস্টলেশন সংক্রান্ত নির্দেশাবলী এখানে রয়েছে এবং এটি পড়ুন ...


কেবলমাত্র হার্ড লিঙ্কগুলির চেয়ে আরও প্রকৃত কোড সরবরাহ করুন।
ব্রাম ভ্যানরোয়

লিঙ্কটি থেকে পরবর্তী খবর: "2 শে জানুয়ারী, 2019 পর্যন্ত ম্যাক্সমাইন্ড এই সমস্ত উদাহরণে আমরা ব্যবহার করা আসল জিওলাইট ডাটাবেসগুলি বন্ধ করে দিয়েছি You আপনি এখানে পুরো ঘোষণাটি পড়তে পারেন: সমর্থন.maxmind.com/geolite-legacy-discontination-notice "
রিক হেলওয়েল

2

কান্ট্রি এপিআইতে একটি আইপি ঠিকানা সহ একটি লাইনার

echo file_get_contents('https://ipapi.co/8.8.8.8/country_name/');

> United States

উদাহরণ:

https://ipapi.co/country_name/ - আপনার দেশ

https://ipapi.co/8.8.8.8/country_name/ - আইপি 8.8.8.8 এর জন্য দেশ


এই API টি 1000 (ফ্রি) এপিআই কলগুলি প্রতিদিন অনুমতি দেয়।
সংস্কার করা হয়েছে

2

আমার একটি সংক্ষিপ্ত উত্তর রয়েছে যা আমি একটি প্রকল্পে ব্যবহার করেছি। আমার উত্তরে, আমি বিবেচনা করি যে আপনার কাছে দর্শকের আইপি ঠিকানা রয়েছে।

$ip = "202.142.178.220";
$ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
//get ISO2 country code
if(property_exists($ipdat, 'geoplugin_countryCode')) {
    echo $ipdat->geoplugin_countryCode;
}
//get country full name
if(property_exists($ipdat, 'geoplugin_countryName')) {
    echo $ipdat->geoplugin_countryName;
}

1

আমি জানি এটি পুরানো, তবে আমি এখানে আরও কয়েকটি সমাধান চেষ্টা করেছিলাম এবং সেগুলি পুরানো বলে মনে হয় বা কেবল নালায় ফিরে আসে। সুতরাং আমি এটি এটি কিভাবে।

http://www.geoplugin.net/json.gp?ip=যা ব্যবহার করে কোনও ধরণের সাইন আপ বা পরিষেবাটির জন্য অর্থ প্রদানের প্রয়োজন হয় না।

function get_client_ip_server() {
  $ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
  $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
  $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
  $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
  $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
  $ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
  $ipaddress = $_SERVER['REMOTE_ADDR'];
else
  $ipaddress = 'UNKNOWN';

  return $ipaddress;
}

$ipaddress = get_client_ip_server();

function getCountry($ip){
    $curlSession = curl_init();
    curl_setopt($curlSession, CURLOPT_URL, 'http://www.geoplugin.net/json.gp?ip='.$ip);
    curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);

    $jsonData = json_decode(curl_exec($curlSession));
    curl_close($curlSession);

    return $jsonData->geoplugin_countryCode;
}

echo "County: " .getCountry($ipaddress);

এবং আপনি যদি এটি সম্পর্কে অতিরিক্ত তথ্য চান, এটি জসনের সম্পূর্ণ রিটার্ন:

{
  "geoplugin_request":"IP_ADDRESS",
  "geoplugin_status":200,
  "geoplugin_delay":"2ms",
  "geoplugin_credit":"Some of the returned data includes GeoLite data created by MaxMind, available from <a href='http:\/\/www.maxmind.com'>http:\/\/www.maxmind.com<\/a>.",
  "geoplugin_city":"Current City",
  "geoplugin_region":"Region",
  "geoplugin_regionCode":"Region Code",
  "geoplugin_regionName":"Region Name",
  "geoplugin_areaCode":"",
  "geoplugin_dmaCode":"650",
  "geoplugin_countryCode":"US",
  "geoplugin_countryName":"United States",
  "geoplugin_inEU":0,
  "geoplugin_euVATrate":false,
  "geoplugin_continentCode":"NA",
  "geoplugin_continentName":"North America",
  "geoplugin_latitude":"37.5563",
  "geoplugin_longitude":"-99.9413",
  "geoplugin_locationAccuracyRadius":"5",
  "geoplugin_timezone":"America\/Chicago",
  "geoplugin_currencyCode":"USD",
  "geoplugin_currencySymbol":"$",
  "geoplugin_currencySymbol_UTF8":"$",
  "geoplugin_currencyConverter":1
}

1

আমি "চন্দ্র নাক্কা" উত্তরের উপর ভিত্তি করে একটি ক্লাস লিখেছি। আশা করি এটি জিওপ্লাগিন থেকে একটি সেশনে তথ্য সংরক্ষণে লোকদের সহায়তা করতে পারে তাই তথ্যগুলি পুনরুদ্ধার করার সময় লোডটি আরও দ্রুত হয়। এটি একটি বেসরকারী অ্যারেতে মানগুলিও সংরক্ষণ করে তাই একই কোডে পুনর্নির্মাণ এটি যত দ্রুত সম্ভব is

class Geo {
private $_ip = null;
private $_useSession = true;
private $_sessionNameData = 'GEO_SESSION_DATA';
private $_hasError = false;
private $_geoData = [];

const PURPOSE_SUPPORT = [
    "all", "*", "location",
    "request",
    "latitude", 
    "longitude",
    "accuracy",
    "timezonde",
    "currencycode",
    "currencysymbol",
    "currencysymbolutf8",
    "country", 
    "countrycode", 
    "state", "region", 
    "city", 
    "address",
    "continent", 
    "continentcode"
];
const CONTINENTS = [
    "AF" => "Africa",
    "AN" => "Antarctica",
    "AS" => "Asia",
    "EU" => "Europe",
    "OC" => "Australia (Oceania)",
    "NA" => "North America",
    "SA" => "South America"
];

function __construct($ip = null, $deepDetect = true, $useSession = true)
{
    // define the session useage within this class
    $this->_useSession = $useSession;
    $this->_startSession();

    // define a ip as far as possible
    $this->_ip = $this->_defineIP($ip, $deepDetect);

    // check if the ip was set
    if (!$this->_ip) {
        $this->_hasError = true;
        return $this;
    }

    // define the geoData
    $this->_geoData = $this->_fetchGeoData();

    return $this;
}

function get($purpose)
{
    // making sure its lowercase
    $purpose = strtolower($purpose);

    // makeing sure there are no error and the geodata is not empty
    if ($this->_hasError || !count($this->_geoData) && !in_array($purpose, self::PURPOSE_SUPPORT)) {
        return 'error';
    }

    if (in_array($purpose, ['*', 'all', 'location']))  {
        return $this->_geoData;
    }

    if ($purpose === 'state') $purpose = 'region';

    return (isset($this->_geoData[$purpose]) ? $this->_geoData[$purpose] : 'missing: '.$purpose);
}

private function _fetchGeoData()
{
    // check if geo data was set before
    if (count($this->_geoData)) {
        return $this->_geoData;
    }

    // check possible session
    if ($this->_useSession && ($sessionData = $this->_getSession($this->_sessionNameData))) {
        return $sessionData;
    }

    // making sure we have a valid ip
    if (!$this->_ip || $this->_ip === '127.0.0.1') {
        return [];
    }

    // fetch the information from geoplusing
    $ipdata = @json_decode($this->curl("http://www.geoplugin.net/json.gp?ip=" . $this->_ip));

    // check if the data was fetched
    if (!@strlen(trim($ipdata->geoplugin_countryCode)) === 2) {
        return [];
    }

    // make a address array
    $address = [$ipdata->geoplugin_countryName];
    if (@strlen($ipdata->geoplugin_regionName) >= 1)
        $address[] = $ipdata->geoplugin_regionName;
    if (@strlen($ipdata->geoplugin_city) >= 1)
        $address[] = $ipdata->geoplugin_city;

    // makeing sure the continentCode is upper case
    $continentCode = strtoupper(@$ipdata->geoplugin_continentCode);

    $geoData = [
        'request' => @$ipdata->geoplugin_request,
        'latitude' => @$ipdata->geoplugin_latitude,
        'longitude' => @$ipdata->geoplugin_longitude,
        'accuracy' => @$ipdata->geoplugin_locationAccuracyRadius,
        'timezonde' => @$ipdata->geoplugin_timezone,
        'currencycode' => @$ipdata->geoplugin_currencyCode,
        'currencysymbol' => @$ipdata->geoplugin_currencySymbol,
        'currencysymbolutf8' => @$ipdata->geoplugin_currencySymbol_UTF8,
        'city' => @$ipdata->geoplugin_city,
        'region' => @$ipdata->geoplugin_regionName,
        'country' => @$ipdata->geoplugin_countryName,
        'countrycode' => @$ipdata->geoplugin_countryCode,
        'continent' => self::CONTINENTS[$continentCode],
        'continentcode' => $continentCode,
        'address' => implode(", ", array_reverse($address))
    ];

    if ($this->_useSession) {
        $this->_setSession($this->_sessionNameData, $geoData);
    }

    return $geoData;
}

private function _startSession()
{
    // only start a new session when the status is 'none' and the class
    // requires a session
    if ($this->_useSession && session_status() === PHP_SESSION_NONE) {
        session_start();
    }
}

private function _defineIP($ip, $deepDetect)
{
    // check if the ip was set before
    if ($this->_ip) {
        return $this->_ip;
    }

    // check if the ip given is valid
    if (filter_var($ip, FILTER_VALIDATE_IP)) {
        return $ip;
    }

    // try to get the ip from the REMOTE_ADDR
    $ip = filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP);

    // check if we need to end the search for a IP if the REMOTE_ADDR did not
    // return a valid and the deepDetect is false
    if (!$deepDetect) {
        return $ip;
    }

    // try to get the ip from HTTP_X_FORWARDED_FOR
    if (($ip = filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR', FILTER_VALIDATE_IP))) {
        return $ip;
    }

    // try to get the ip from the HTTP_CLIENT_IP
    if (($ip = filter_input(INPUT_SERVER, 'HTTP_CLIENT_IP', FILTER_VALIDATE_IP))) {
        return $ip;
    }

    return $ip;
}

private function _hasSession($key, $filter = FILTER_DEFAULT) 
{
    return (isset($_SESSION[$key]) ? (bool)filter_var($_SESSION[$key], $filter) : false);
}

private function _getSession($key, $filter = FILTER_DEFAULT)
{
    if ($this->_hasSession($key, $filter)) {
        $value = filter_var($_SESSION[$key], $filter);

        if (@json_decode($value)) {
            return json_decode($value, true);
        }

        return filter_var($_SESSION[$key], $filter);
    } else {
        return false;
    }
}

private function _setSession($key, $value) 
{
    if (is_array($value)) {
        $value = json_encode($value);
    }

    $_SESSION[$key] = $value;
}

function emptySession($key) {
    if (!$this->_hasSession($key)) {
        return;
    }

    $_SESSION[$key] = null;
    unset($_SESSION[$key]);

}

function curl($url) 
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
}

এই শ্রেণীর সাথে 'অপ' প্রশ্নটির উত্তর দিয়ে আপনি কল করতে পারেন

$country = (new \Geo())->get('country'); // United Kingdom

এবং উপলব্ধ অন্যান্য বৈশিষ্ট্যগুলি হ'ল:

$geo = new \Geo('185.35.50.4');
var_dump($geo->get('*')); // allias all / location
var_dump($geo->get('country'));
var_dump($geo->get('countrycode'));
var_dump($geo->get('state')); // allias region
var_dump($geo->get('city')); 
var_dump($geo->get('address')); 
var_dump($geo->get('continent')); 
var_dump($geo->get('continentcode'));   
var_dump($geo->get('request'));
var_dump($geo->get('latitude'));
var_dump($geo->get('longitude'));
var_dump($geo->get('accuracy'));
var_dump($geo->get('timezonde'));
var_dump($geo->get('currencyCode'));
var_dump($geo->get('currencySymbol'));
var_dump($geo->get('currencySymbolUTF8'));

ফিরতি

array(15) {
  ["request"]=>
  string(11) "185.35.50.4"
  ["latitude"]=>
  string(7) "51.4439"
  ["longitude"]=>
  string(7) "-0.1854"
  ["accuracy"]=>
  string(2) "50"
  ["timezonde"]=>
  string(13) "Europe/London"
  ["currencycode"]=>
  string(3) "GBP"
  ["currencysymbol"]=>
  string(2) "£"
  ["currencysymbolutf8"]=>
  string(2) "£"
  ["city"]=>
  string(10) "Wandsworth"
  ["region"]=>
  string(10) "Wandsworth"
  ["country"]=>
  string(14) "United Kingdom"
  ["countrycode"]=>
  string(2) "GB"
  ["continent"]=>
  string(6) "Europe"
  ["continentcode"]=>
  string(2) "EU"
  ["address"]=>
  string(38) "Wandsworth, Wandsworth, United Kingdom"
}
string(14) "United Kingdom"
string(2) "GB"
string(10) "Wandsworth"
string(10) "Wandsworth"
string(38) "Wandsworth, Wandsworth, United Kingdom"
string(6) "Europe"
string(2) "EU"
string(11) "185.35.50.4"
string(7) "51.4439"
string(7) "-0.1854"
string(2) "50"
string(13) "Europe/London"
string(3) "GBP"
string(2) "£"
string(2) "£"

0

ব্যবহারকারী দেশ এপিআই ঠিক আপনার যা প্রয়োজন হয়েছে। আপনি এখানে মূলত ফাইল_জেট_কন্টেন্টস () ব্যবহার করে একটি নমুনা কোড এখানে দিয়েছেন:

$result = json_decode(file_get_contents('http://usercountry.com/v1.0/json/'.$cip), true);
$result['country']['name']; // this contains what you need

1
এই API টি প্রতিদিন 100 (ফ্রি) এপিআই কল দেয় calls
সংস্কার করা হয়েছে

0

আপনি আইপস্ট্যাক জিও এপিআই ব্যবহার করে দেশ এবং শহরটি পেতে পারেন get আপনার নিজের আইপস্ট্যাক এপিআই পেতে হবে এবং তারপরে নীচের কোডটি ব্যবহার করতে হবে:

<?php
 $ip = $_SERVER['REMOTE_ADDR']; 
 $api_key = "YOUR_API_KEY";
 $freegeoipjson = file_get_contents("http://api.ipstack.com/".$ip."?access_key=".$api_key."");
 $jsondata = json_decode($freegeoipjson);
 $countryfromip = $jsondata->country_name;
 echo "Country: ". $countryfromip ."";
?>

উত্স: আইপস্ট্যাক এপিআই ব্যবহার করে পিএইচপিতে দর্শকদের দেশ এবং শহর পান


0

এটিget_client_ip() বেশিরভাগ উত্তরগুলির মূল ফাংশনের অভ্যন্তরে অন্তর্ভুক্ত করা হয়েছে এর কার্যকারিতা সম্পর্কে এটি একটি সুরক্ষা নোটget_geo_info_for_this_ip()

মত অনুরোধ হেডার আইপি ডেটার উপর অত্যধিক নির্ভর করে না Client-IPবা X-Forwarded-Forকারণ তারা খুব সহজেই প্রতারণামূলক করা যেতে পারে, তবে আপনি TCP সংযোগ উৎস আইপি যে আসলে আমাদের সার্ভার এবং ক্লায়েন্ট মধ্যে স্থাপন করা হয় উপর নির্ভর করা উচিত নয় $_SERVER['REMOTE_ADDR']হিসাবে এটা করতে পারেন ' টি বিদ্রূপ করা হবে

$_SERVER['HTTP_CLIENT_IP'] // can be spoofed 
$_SERVER['HTTP_X_FORWARDED_FOR'] // can be spoofed 
$_SERVER['REMOTE_ADDR']// can't be spoofed 

ছদ্মবেশী আইপি দেশটি পাওয়া ঠিক আছে তবে মনে রাখবেন যে কোনও সুরক্ষা মডেল (যেমন: ঘন ঘন অনুরোধ প্রেরণকারী আইপি নিষিদ্ধ করা) পুরো সুরক্ষা মডেলটিকে ধ্বংস করবে mind আইএমএইচও আমি প্রক্সি সার্ভারের আইপি হলেও প্রকৃত ক্লায়েন্টের আইপি ব্যবহার করতে পছন্দ করি।


0

চেষ্টা

  <?php
  //gives you the IP address of the visitors
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
      $ip = $_SERVER['HTTP_CLIENT_IP'];}
  else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
      $ip = $_SERVER['REMOTE_ADDR'];
  }

  //return the country code
  $url = "http://api.wipmania.com/$ip";
  $country = file_get_contents($url);
  echo $country;

  ?>

যদি-অন্য অংশটি আপনাকে দর্শনার্থীর আইপি ঠিকানা দেয় এবং পরের অংশটি দেশের কোডটি ফেরত দেবে। পরিদর্শন করার চেষ্টা করুন api.wipmania.com এবং তারপর api.wipmania.com/[your_IP_address]
Dipanshu Mahla

0

আপনি আমার পরিষেবাটি ব্যবহার করতে পারেন: https://SmartIP.io , যা কোনও আইপি ঠিকানার পুরো দেশের নাম এবং শহরের নাম সরবরাহ করে। আমরা সময় অঞ্চল, মুদ্রা, প্রক্সি সনাক্তকরণ, টিওআর নোড সনাক্তকরণ এবং ক্রিপ্টো সনাক্তকরণও প্রকাশ করি।

আপনাকে কেবল সাইনআপ করতে হবে এবং একটি ফ্রি এপিআই কী পাওয়া উচিত যা প্রতি মাসে 250,000 অনুরোধের জন্য মঞ্জুরি দেয়।

অফিসিয়াল পিএইচপি লাইব্রেরি ব্যবহার করে, এপিআই কলটি হয়ে যায়:

$apiKey = "your API key";
$smartIp = new SmartIP($apiKey);
$response = $smartIp->requestIPData("8.8.8.8");

echo "\nstatus code: " . $response->{"status-code"};
echo "\ncountry name: " . $response->country->{"country-name"};

আরও তথ্যের জন্য API ডকুমেন্টেশন চেক করুন: https://smartip.io/docs


0

2019 পর্যন্ত ম্যাক্সমাইন্ড দেশ ডিবি ব্যবহার করা যেতে পারে:

<?php
require_once 'vendor/autoload.php';
use MaxMind\Db\Reader;
$databaseFile = 'GeoIP2-Country.mmdb';
$reader = new Reader($databaseFile);
$cc = $reader->get($_SERVER['REMOTE_ADDR'])['country']['iso_code'] # US/GB...
$reader->close();

সূত্র: https://github.com/maxmind/MaxMind-DB-Reader-php


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.