Thông thường, địa chỉ IP của khách truy cập trang web được sử dụng để nhận dạng anh ta. Nhưng bên cạnh đó, bằng cách sử dụng IP, bạn có thể nhận được nhiều thông tin bổ sung về khách truy cập - ví dụ: tìm ra nhà cung cấp Internet và vị trí địa lý của họ. Trong thực tế, các tập lệnh PHP phía máy chủ thường được sử dụng nhất để trích xuất địa chỉ IP từ các tiêu đề yêu cầu được gửi bởi trình duyệt.
Nó là cần thiết
Kiến thức cơ bản về PHP
Hướng dẫn
Bước 1
Sử dụng hàm getenv tích hợp của PHP để đọc địa chỉ IP từ mảng biến môi trường superglobal. Trong trường hợp đơn giản nhất, chỉ cần đọc biến có tên REMOTE_ADDR là đủ. Đoạn mã PHP tương ứng có thể trông giống như sau: $ userIP = getenv ('REMOTE_ADDR');
Bước 2
Ngoài biến REMOTE_ADDR được gửi trong yêu cầu, hãy kiểm tra các biến HTTP_VIA và HTTP_X_FORWARDED_FOR. Nếu khách truy cập sử dụng máy chủ proxy, thì địa chỉ trung gian phải được ghi lại trong cả hai biến - trong cả HTTP_VIA và REMOTE_ADDR. Trong trường hợp này, bạn có thể cố gắng tìm ra IP thực của khách truy cập thông qua HTTP_X_FORWARDED_FOR - máy chủ proxy phải đặt địa chỉ gốc vào đó. Tuy nhiên, điều này không phải lúc nào cũng được thực hiện và người dùng có cơ hội chọn một máy chủ proxy "không rõ ràng" không truyền IP gốc của khách truy cập đã gửi yêu cầu. Trong mọi trường hợp, bạn nên sử dụng nhiều cách nhất có thể để lấy địa chỉ IP ban đầu trong mã của mình bằng cách thêm dấu kiểm cho biến
Bước 3
Kết hợp trong một dòng mã PHP một kiểm tra tuần tự của ba biến môi trường, có thể chứa địa chỉ IP ban đầu của khách truy cập. Điều này có thể được thực hiện, chẳng hạn như sau: $ userIP = getenv ('HTTP_CLIENT_IP') HOẶC $ userIP = getenv ('HTTP_X_FORWARDED_FOR') HOẶC $ userIP = getenv ('REMOTE_ADDR');
Bước 4
Loại bỏ các ký tự thừa và "rác" khác khỏi giá trị IP kết quả có thể xâm nhập vào các biến môi trường. Điều này có thể được thực hiện, ví dụ: bằng cách sử dụng các hàm PHP tích hợp TRIM và preg_replace: $ userIP = TRIM (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ userIP));
Bước 5
Kết hợp tất cả mã vào một hàm tùy chỉnh để bạn có thể tham khảo nó thay vì lặp đi lặp lại các dòng kiểm tra và dọn dẹp trong các phần khác nhau của tập lệnh PHP của bạn. Ví dụ: như sau: FUNCTION getUserIP () {
$ userIP = getenv ('HTTP_CLIENT_IP') HOẶC $ userIP = getenv ('HTTP_X_FORWARDED_FOR') HOẶC $ userIP = getenv ('REMOTE_ADDR');
QUAY TRIM (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ userIP));
}