Көбінесе сайтқа кірушінің IP-мекен-жайы оны анықтау үшін қолданылады. Сонымен қатар, IP көмегімен сіз келуші туралы көптеген қосымша ақпарат ала аласыз - мысалы, оның интернет-провайдерін және географиялық орнын біліңіз. Іс жүзінде серверлік PHP сценарийлері көбінесе браузер жіберген сұрау тақырыптарынан IP-адрестерді шығару үшін қолданылады.
Бұл қажетті
PHP туралы негізгі білім
Нұсқаулық
1-қадам
IP мекен-жайларын суперглобалды айнымалы массивтен оқу үшін PHP-ге ендірілген getenv функциясын қолданыңыз. Қарапайым жағдайда REMOTE_ADDR деп аталатын айнымалыны оқу жеткілікті болады. PHP кодының сәйкес бөлігі келесідей болуы мүмкін: $ userIP = getenv ('REMOTE_ADDR');
2-қадам
Сұрауда жіберілген REMOTE_ADDR айнымалысынан басқа, HTTP_VIA және HTTP_X_FORWARDED_FOR айнымалыларын тексеріңіз. Егер келуші прокси-серверді қолданса, онда аралық мекен-жай екі айнымалыда да жазылуы керек - HTTP_VIA және REMOTE_ADDR екеуінде. Бұл жағдайда HTTP_X_FORWARDED_FOR арқылы келушінің нақты IP-ін білуге тырысуға болады - прокси-сервер оған бастапқы мекен-жайын қоюы керек. Алайда, бұл әрдайым орындала бермейді және пайдаланушының сұранысты жіберген келушінің IP түпнұсқасын жібермейтін «мөлдір емес» прокси-серверді таңдауға мүмкіндігі бар. Қалай болғанда да, HTTP_CLIENT_IP айнымалысына чек қосу арқылы сіздің кодыңыздағы түпнұсқа IP мекенжайды алудың мүмкіндігінше көбірек тәсілдерін қолдануыңыз керек.
3-қадам
PHP кодының бір жолында үш қоршаған ортаның айнымалыларын дәйекті түрде тексеріңіз, онда келушінің бастапқы IP мекенжайы болуы мүмкін. Мұны, мысалы, келесідей жасауға болады: $ userIP = getenv ('HTTP_CLIENT_IP') НЕМЕСЕ $ userIP = getenv ('HTTP_X_FORWARDED_FOR') НЕМЕСЕ $ userIP = getenv ('REMOTE_ADDR');
4-қадам
Пайда болған IP мәнінен қоршаған орта айнымалыларына енуі мүмкін қосымша таңбаларды және басқа «қоқыстарды» алып тастаңыз. Мұны, мысалы PHP-дің TRIM және preg_replace функцияларының көмегімен жасауға болады: $ userIP = TRIM (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ userIP));
5-қадам
Барлық кодтарды PHP сценарийлерінің әр түрлі бөліктерінде тексеру және тазарту жолдарын бірнеше рет қайталаудың орнына оған сілтеме жасай алатындай етіп, теңшелетін функцияға біріктіріңіз. Мысалы, келесідей: FUNCTION getUserIP () {
$ userIP = getenv ('HTTP_CLIENT_IP') НЕМЕСЕ $ userIP = getenv ('HTTP_X_FORWARDED_FOR') НЕМЕСЕ $ userIP = getenv ('REMOTE_ADDR');
RETURN TRIM (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ userIP));
}