Сіздің сайтыңызға кірушінің IP-мекен-жайы бойынша сіз ол туралы көп нәрсе біле аласыз - ел, қала, Интернет-провайдердің аты және электрондық пошта мекен-жайы және т.б. Бірақ басты мәні IP-нің серверлік сценарийлер үшін келуші идентификаторы бола алатындығында. Төменде PHP көмегімен IP мекенжайды қалай анықтауға болатындығы сипатталған.
Бұл қажетті
PHP туралы негізгі білім
Нұсқаулық
1-қадам
IP мекенжайын браузердің сұраныс серверіне жіберілген тақырыптардан шығару үшін getenv функциясын қолданыңыз. Ол қоршаған ортаның айнымалыларынан оған көрсетілген мәндерді оқиды. REMOTE_ADDR деп аталатын айнымалы келушінің IP-мекен-жайын сақтау үшін қолданылады. Алайда, клиент прокси-серверді қолдана алады, бұл жағдайда айнымалының орнына сіз қалаған адрес емес, оның адресі болады. Веб-серфердің аралық IP-ді қолданып жатқанын HTTP_VIA деп аталатын қоршаған орта айнымалысына қарап білуге болады. Оған тізбектегі прокси-серверлердің барлық мекен-жайлары үтірлермен бөлініп орналастырылған. Аралық серверлер келушінің мекен-жайын HTTP_X_FORWARDED_FOR деп аталатын айнымалыға орналастыруы керек, бірақ бұл толығымен прокси параметрлеріне байланысты. Бұл дегеніміз, IP мекенжайын анықтаудың мүмкіндігінше көбірек қамту үшін сізге кемінде үш айнымалының мазмұнын тексеру қажет: REMOTE_ADDR, HTTP_X_FORWARDED_FOR және жақсырақ
2-қадам
Барлық үш айнымалыларды тексеруді PHP кодының бір жолына біріктіруге болады, мысалы:
$ ipAddr = getenv ('HTTP_CLIENT_IP') немесе $ ipAddr = getenv ('HTTP_X_FORWARDED_FOR') немесе $ ipAddr = getenv ('REMOTE_ADDR');
IP-мекен-жайдың мәнін осылайша алғаннан кейін оны мүмкін бұрмаланулардан және қажет емес таңбалардан тазартқан жөн. Ол үшін тұрақты тіркесті қолдануға болады:
$ ipAddr = кесу (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ ipAddr));
3-қадам
Кодтың екі жолын да бір функцияға біріктіру қалады:
getIP () функциясы {
$ ipAddr = getenv ('HTTP_CLIENT_IP') немесе $ ipAddr = getenv ('HTTP_X_FORWARDED_FOR') немесе $ ipAddr = getenv ('REMOTE_ADDR');
return trim (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ ipAddr));
}