Çox vaxt bir sayt ziyarətçisinin IP ünvanı onu tanımaq üçün istifadə olunur. Bununla yanaşı, IP-dən istifadə edərək ziyarətçi haqqında bir çox əlavə məlumat əldə edə bilərsiniz - məsələn, İnternet provayderini və coğrafi yerini öyrənin. Təcrübədə, server tərəfli PHP skriptləri ən çox brauzer tərəfindən göndərilən sorğu başlıqlarından IP ünvanlarını çıxarmaq üçün istifadə olunur.
Vacibdir
PHP haqqında əsas biliklər
Təlimat
Addım 1
Superglobal mühit dəyişən massivindən IP ünvanlarını oxumaq üçün PHP-nin daxili getenv funksiyasından istifadə edin. Ən sadə halda REMOTE_ADDR adlı dəyişəni oxumaq kifayətdir. PHP kodunun müvafiq hissəsi belə görünə bilər: $ userIP = getenv ('REMOTE_ADDR');
Addım 2
İstəkdə göndərilən REMOTE_ADDR dəyişəninə əlavə olaraq HTTP_VIA və HTTP_X_FORWARDED_FOR dəyişənlərini yoxlayın. Ziyarətçi bir proxy server istifadə edirsə, aralıq adres hər iki dəyişkəndə - həm HTTP_VIA, həm də REMOTE_ADDR-də qeyd olunmalıdır. Bu vəziyyətdə, HTTP_X_FORWARDED_FOR vasitəsilə ziyarətçinin əsl IP-sini tapmaq üçün cəhd edə bilərsiniz - proxy server orijinal ünvanı daxil etməlidir. Lakin, bu hər zaman edilmir və istifadəçinin sorğu göndərən ziyarətçinin orijinal IP-sini ötürməyən "qeyri-şəffaf" bir proxy server seçmək imkanı var. Hər halda, HTTP_CLIENT_IP dəyişəninə bir çek əlavə edərək kodunuzdakı orijinal IP ünvanını əldə etmək üçün mümkün qədər çox yoldan istifadə etməlisiniz.
Addım 3
Bir PHP kodunda bir ziyarətçinin orijinal IP ünvanını ehtiva edə bilən üç mühit dəyişəninin ardıcıl yoxlanışını birləşdirin. Bunu, məsələn, belə etmək olar: $ userIP = getenv ('HTTP_CLIENT_IP') OR $ userIP = getenv ('HTTP_X_FORWARDED_FOR') OR $ userIP = getenv ('REMOTE_ADDR');
Addım 4
Ortaya çıxan IP dəyərindən ətraf mühit dəyişənlərinə daxil ola biləcək əlavə simvolları və digər "zibilləri" silin. Bunu, məsələn, quraşdırılmış PHP funksiyaları TRIM və preg_replace istifadə edərək etmək olar: $ userIP = TRIM (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ userIP));
Addım 5
Bütün kodları xüsusi bir funksiyaya birləşdirin ki, PHP skriptlərinizin müxtəlif hissələrində yoxlama və təmizləmə xəttlərini təkrarlamaq əvəzinə ona müraciət edə bilərsiniz. Məsələn, bu kimi: FUNCTION getUserIP () {
$ userIP = getenv ('HTTP_CLIENT_IP') OR $ userIP = getenv ('HTTP_X_FORWARDED_FOR') OR $ userIP = getenv ('REMOTE_ADDR');
RETURN TRIM (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ userIP));
}