Hướng dẫn code check ip php

Nhiều khi chúng ta cần lấy địa chỉ IP của người truy cập cho các mục đích khác nhau như bảo mật, huyển hướng khách truy cập đến trang khác, chặn / cấm khách truy cập....

Vậy để thu thập được địa chỉ IP của người dùng một cách dễ dàng trong PHP bằng biến $_SERVER

Cách đơn giản nhất để lấy địa chỉ IP của khách truy cập hiện tại trong PHP là sử dụng REMOTE_ADDR trong biến $_SERVER có sẵn trong PHP. 

Lấy địa chỉ IP của client

$_SERVER ['REMOTE_ADDR'] - Nó trả về địa chỉ IP của người dùng hiện đang truy cập trang web.

Ví dụ: 

  

Kết quả :

User IP Address - ::1

Nhưng đôi khi REMOTE_ADDR không trả về địa chỉ IP của máy khách và lý do chính đằng sau là sử dụng proxy. Trong tình huống như vậy, chúng tôi sẽ thử một cách khác để lấy địa chỉ IP thực của người dùng trong PHP.

  

Sơ đồ lấy chương trình lấy địa chỉ IP

Sơ đồ cho chương trình trên sẽ giống như dưới đây.

Lấy địa chỉ IP của website

Một cách khác để lấy địa chỉ IP của bất kỳ trang web nào bằng URL của nó bằng gethostbyname[].

Ví dụ:

  

Kết quả: 

IP Address of Google is - 172.217.166.4
IP Address of javaTpoint is - 95.216.57.234

Cách 1 : Lấy địa chỉ IP thông qua hàm getenv[]


// Function to get the client IP address
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;
}

Cách dùng

echo get_client_ip[];

Cách 2 : Hướng dẫn lấy địa chỉ IP thông qua $_SERVER


// Function to get the client IP address
function get_client_ip[] {
    $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;
}

Nội dung chính

  • Cách kiểm tra địa chỉ IP bằng Abstract API và PHP
    • # Nhận Abstract API Key
    • # Nhận địa chỉ IP của người dùng
    • # Kiểm tra địa chỉ IP bằng Abstract API
    • # Dùng Guzzle
    • # Dùng JavaScript
  • Kết luận

Kiểm tra địa chỉ IP bằng Abstract API và PHP: Khi làm việc trên các ứng dụng, bạn có thể muốn có được vị trí địa lý của người dùng. Dựa trên vị trí địa lý của người dùng, các nội dung khác nhau có thể được phân phát trên trang web. Đó có thể là các mức giá, quảng cáo, ưu đãi khác nhau, v.v. Trong bài viết này, chúng ta sẽ thảo luận về một công cụ tra cứu địa chỉ IP được gọi là Abstract IP geolocation API.

Trong bài hướng dẫn cách kiểm tra địa chỉ IP bằng Abstract API và PHP này sẽ sử dụng PHP cURL, Guzzle và JavaScript vani để tương tác với API của Abstract.

# Nhận Abstract API Key

Để bắt đầu, trước tiên bạn cần đăng kývới Abstract IP Geolocation API. Họ cung cấp cả gói miễn phí và cao cấp. Trong gói miễn phí, tại thời điểm viết bài này, 20000 yêu cầu mỗi tháng được phép. Tuy nhiên, bạn có thể chọn gói theo yêu cầu của mình.

Sau khi đăng ký, bạn sẽ có quyền truy cập vào trang tổng quan. Từ trang tổng quan, sao chép khóa API sẽ được yêu cầu trong khi gọi API của chúng.

# Nhận địa chỉ IP của người dùng

Khi bạn đã có khóa API. Tiếp theo, chúng ta cần tìm ra IP của người dùng một cách động. Bạn có thể nghĩ rằng sử dụng $_SERVER[‘REMOTE_ADDR’] có thể lấy trực tiếp địa chỉ IP. Điều này không đúng nếu máy chủ được đặt sau proxy hoặc tường lửa. Chúng ta có thể xử lý các trường hợp như vậy bằng cách sử dụng mã bên dưới.

function getUserIpAddr[] {
    if [!empty[$_SERVER['HTTP_CLIENT_IP']]] {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif [!empty[$_SERVER['HTTP_X_FORWARDED_FOR']]] {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

Trong đoạn mã trên, đã thêm các kiểm tra cho HTTP_CLIENT_IP và HTTP_X_FORWARDED_FOR. 2 biến này cung cấp địa chỉ IP của người dùng từ các máy chủ sử dụng proxy hoặc tường lửa. Nếu cả hai giá trị này không được tìm thấy thì chúng ta nhận được địa chỉ IP bằng cách sử dụng REMOTE_ADDR.

# Kiểm tra địa chỉ IP bằng Abstract API

Tiếp tục và tương tác với API vị trí địa lý IP của Abstract. Đầu tiên chúng ta hãy bắt đầu với cURL PHP. Để sử dụng cURL, hãy đảm bảo rằng tiện ích mở rộng cURL được bật trên máy chủ của bạn.

$ip_address = getUserIpAddr[];
$api_key = 'API_KEY';
$url = "//ipgeolocation.abstractapi.com/v1/?api_key=$api_key&ip_address=$ip_address";
$ch = curl_init[];  
curl_setopt[$ch, CURLOPT_RETURNTRANSFER, 1];
curl_setopt[$ch, CURLOPT_URL, $url];
$response = curl_exec[$ch];
if [curl_errno[$ch]] {
    $error_msg = curl_error[$ch];
    echo $error_msg;
}
$arr_result = json_decode[$response, true];
print_r[$arr_result];

Đảm bảo thay thế API_KEY bằng giá trị thực. Khi chạy mã này, bạn sẽ nhận được các thông tin chi tiết như thành phố, quốc gia, múi giờ, vĩ độ và kinh độ, v.v. Đầu ra là một cái gì đó giống như dưới đây.

Array
[
    [ip_address] => 103.47.153.189
    [city] => Pune
    [city_geoname_id] => 1259229
    [region] => Maharashtra
    [region_iso_code] => MH
    [region_geoname_id] => 1264418
    [postal_code] => 411038
    [country] => India
    [country_code] => IN
    [country_geoname_id] => 1269750
    [country_is_eu] => 
    [continent] => Asia
    [continent_code] => AS
    [continent_geoname_id] => 6255147
    [longitude] => 73.7286
    [latitude] => 18.6161
    [security] => Array
        [
            [is_vpn] => 
        ]

    [timezone] => Array
        [
            [name] => Asia/Kolkata
            [abbreviation] => IST
            [gmt_offset] => 5
            [current_time] => 16:11:33
            [is_dst] => 
        ]

    [flag] => Array
        [
            [emoji] => IN
            [unicode] => U+1F1EE U+1F1F3
            [png] => //static.abstractapi.com/country-flags/IN_flag.png
            [svg] => //static.abstractapi.com/country-flags/IN_flag.svg
        ]

    [currency] => Array
        [
            [currency_name] => Indian Rupee
            [currency_code] => INR
        ]

    [connection] => Array
        [
            [autonomous_system_number] => 134006
            [autonomous_system_organization] => Sheng Li Telecom India Private Limited
            [connection_type] => Corporate
            [isp_name] => Sheng Li Telecom India Private Limited
            [organization_name] => Sheng Li Telecom India Private Limited
        ]

]

Người ta có thể không muốn tất cả thông tin này. Bạn có thể giới hạn phản hồi bằng cách chuyển tham số các trường. Giả sử bạn chỉ muốn nhận được thành phố và quốc gia. Sau đó xây dựng URL như sau.

$url = "//ipgeolocation.abstractapi.com/v1/?api_key=$api_key&ip_address=$ip_address&fields=city,country";

Trên trang web của bạn, bạn có thể nhận được một số khách truy cập đang sử dụng VPN. VPN gây khó khăn cho việc tìm địa chỉ IP thực của người dùng. Địa chỉ IP bạn nhận được từ máy chủ là của VPN chứ không phải của khách truy cập.

Trong phản hồi của Abstract API, nó cũng cung cấp giá trị của VPN bằng cách sử dụng $arr_result[‘security’][‘is_vpn’]. Nếu giá trị này không trống, điều đó có nghĩa là khách truy cập đang sử dụng VPN và không có cách nào để lấy địa chỉ IP ban đầu của họ.

# Dùng Guzzle

Trong trường hợp của các framework PHP như Laravel hoặc các framework khác, bạn có thể muốn sử dụng Guzzle. Guzzle là một máy khách HTTP PHP để gửi các yêu cầu HTTP và nhận một phản hồi HTTP. Nó là một thay thế cho cURL PHP.

Để sử dụng Guzzle, hãy cài đặt nó bằng lệnh dưới đây.

composer require guzzlehttp/guzzle

Sau đó, hãy viết mã bên dưới để gọi Abstract API thông qua thư viện Guzzle.

Chủ Đề