NHANWEB

Sử dụng PHP class để xác định địa điểm ( use PHP class to detect client location)

Không biết các dev khác thế nào nhưng vói mình thì việc cần xác định quốc gia của người dùng thông qua địa chỉ IP là cực kì quan trọng. Mục đích có thể là để tìm kiếm ngôn ngữ phù hợp nhất, tìm cửa hàng gần vị trí của người dùng trên quốc gia (thông qua kinh độ, vĩ độ), xác định giới hạn phục vụ/ngăn chặn những quốc gia bạn không muốn website mình phục vụ hay đơn giản hoá thao tác nhập liệu của người dùng như tự động lựa chọn quốc gia, vùng miền tương ứng…

Trong đoạn mã dưới đây, mình giới thiệu bạn sử dụng thư viện IP IPInfoDb thông qua API của họ để xác định quốc gia, mã quốc gia, vùng miền, thành phố, kinh độ, vĩ độ của người dùng. Dĩ nhiên, tất cả đều dựa trên IP truy cập vào website bạn.

Lưu ý: dữ liệu IP có thể có một số sai khác so với dữ liệu thực tế do nhà mạng ở từng vùng cấp phát và khai báo. Nên mình không khuyến khích sử dụng các dữ liệu để “làm màu” với người dùng nếu không cần thiết nha !

Class PHP

appkey = $key;
    $this->userip = $this->get_client_ip();

    if (strlen($this->userip)  Invalid IP address";
       exit();
    }
  }

   private function get_client_ip() {
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ipaddress = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ipaddress = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
           $ipaddress = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ipaddress = getenv('REMOTE_ADDR');
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
   }

  private function iiddecode() {
    $jsoncont = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=" . $this->appkey. "&ip=" . $this->userip . "&format=json");
    $getdecoded = json_decode($jsoncont, true);
    return $getdecoded;
  }
  public function city() {
       return $this->iiddecode()['cityName'];
  }
  //country
  public function country() {
       return $this->iiddecode()['countryName'];
  }
  // country code
  public function countrycode() {
       return $this->iiddecode()['countryCode'];
  }
  // regiom name
  public function region() {
       return $this->iiddecode()['regionName'];
  }
  // let from IP
     public function latFromIp() {
       return $this->iiddecode()['latitude'];
  }
  // lon from IP
    public function longFromIp() {
       return $this->iiddecode()['longitude'];
  }
}

?>

Ở đây 500 anh em chú ý dùm mình là biến $key được truyền trong hàm __construct() bạn cần đăng ký tài khoản API và nhận API từ ipinfodb.com. Dĩ nhiên, Free :D

Sử dụng class PHP

Sau khi tạo class chứa các hàm và thuộc tính cần thiết, bạn triển khai mã như sau:

city();
?>

Class trên cung cấp cho bạn các dữ liệu sau:

  1. Lattitude(vĩ độ): latFromIp()
  2. Longitude(kinh độ): longFromIp()
  3. Region: region()
  4. Country code: countrycode()
  5. Country name: country()
  6. City name: city()

Đấy, khi đã lấy được đống dữ liệu này rồi mình tin rằng bạn có thể làm được khối việc. Việc triển khai code và sử dụng cũng khá đơn giản.

Exit mobile version