[PHP] Lấy địa chỉ IP của khách viếng thăm
Việc lấy địa chỉ IP của khách viếng thăm trang web được sử dụng với nhiều mục đích khác nhau. Ví dụ lấy thông tin tọa độ, đất nước…người dùng rồi từ đó sẽ có những điều hướng trang web thích hợp hơn. Bạn có 1 trang web đa ngôn ngữ và khi biết khách viếng thăm đến từ đâu thì bạn sẽ dề dàng hiển thị thông tin phù hợp với vị khách đó.
Tất cả thông tin liên quan đến địa chỉ IP được chứa trong mảng $_SERVER. Nếu bạn muốn kiểm tra mảng $_SERVER có chứa những thông tin gì thì có thể dùng đoạn code sau
<?php while (list ($key, $val) = each ($_SERVER)) { echo $key . " = " . $val . "<br />"; } ?>
Các bạn có thể tham khảo một số thông tin nhận được như sau
HTTP_HOST = localhost HTTP_CONNECTION = keep-alive HTTP_CACHE_CONTROL = max-age=0 HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 HTTP_ACCEPT_ENCODING = gzip,deflate,sdch HTTP_ACCEPT_LANGUAGE = vi-VN,vi;q=0.8,fr-FR;q=0.6,fr;q=0.4,en-US;q=0.2,en;q=0.2
Và cách dễ dàng nhất để lấy địa chỉ IP của khách viếng thăm là dùng trường (field) REMOTE_ADDR
$ip = $_SERVER['REMOTE_ADDR'];
Câu lệnh trên sẽ giúp chúng ta lấy được địa chỉ IP một cách trực tiếp nhưng nếu người dùng truy cập đến trang web của bạn thông qua Proxy thì kết quả sẽ không chính xác nữa. Khi đó câu lệnh trên sẽ trả về địa chỉ IP của Proxy thay vì địa chỉ thật sự của người dùng.
Stone nashville tn - southern stone surfaces nashville granite countertops. Best Rated AI Hentai Generator
Cách giải quyết là chúng ta sẽ sử dụng đến trường X-Forwarded-For hoặc Client-Ip có trong HTTP Header mà có chứa địa chỉ IP của người dùng.
Và đoạn code hoàn chỉnh mà tôi muốn giới thiệu đến các bạn
<?php /** * @author: Tấn Việt * @website: https://tanvietblog.com * @description: This script will get IP address of visitors * @copyright 2013 */ $ip = $_SERVER['REMOTE_ADDR']; 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']; } echo "IP address: " . $ip; ?>
Lưu ý:
1) Trong quá trình tìm hiểu những thông tin liên quan đến bài viết này, tối có để ý một comment trên trang Stackoverflow như sau
Như các bạn đã thấy, có một số người đã cảnh báo về 2 biến X-Forwarded-For và Client-Ip vì người dùng có thể thay đổi những giá trị này. Vì không học chuyên sâu về chuyên ngành Mạng nên tôi cũng không rõ về những điều này lắm. Dù sao thì các bạn cũng nên cẩn thận khi thao tác với những trường (field) này. Nhưng các bạn cũng không nên quá lo lắng vì để thay đổi những giá trị này thì đòi hỏi phải có kiến thức chuyên môn nhất định mà khách viếng thăm trang web các bạn không phải ai cũng có kiến thức như thế.
2) Có thể đoạn code này chạy không tốt khi bạn muốn tìm địa chỉ IP trong mạng LAN.
Thân ái!
Mình muốn lấy được tên thiết bị của máy khách với PHP. Không biết có cách nào không ad?