Kwa anwani ya IP ya mgeni kwenye wavuti yako, unaweza kujua mengi kumhusu - nchi, jiji, jina na anwani ya barua pepe ya mtoa huduma wa mtandao, nk. Lakini thamani kuu ni kwamba IP inaweza kutumika kama kitambulisho cha wageni kwa maandishi ya upande wa seva. Hapa chini imeelezewa jinsi unaweza kuamua anwani ya IP ukitumia PHP
Ni muhimu
Ujuzi wa kimsingi wa PHP
Maagizo
Hatua ya 1
Ili kutoa anwani ya IP kutoka kwa vichwa vilivyotumwa kwa seva ya ombi la kivinjari, tumia kazi ya getenv. Inasoma maadili yaliyoainishwa kutoka kwa anuwai ya mazingira. Tofauti inayoitwa REMOTE_ADDR hutumiwa kuhifadhi anwani ya IP ya mgeni. Walakini, mteja anaweza kutumia seva ya wakala, katika hali hiyo ubadilishaji utakuwa na anwani yake, na sio ile unayotaka. Unaweza kujua kwamba mtaftaji wa wavuti anatumia IP ya kati kwa kutazama anuwai inayoitwa HTTP_VIA. Anwani zote za seva mbadala zinazohusika na mnyororo zimewekwa ndani yake, zikitenganishwa na koma. Seva za kati lazima ziweke anwani ya mgeni katika anuwai iliyoitwa HTTP_X_FORWARDED_FOR, lakini hii inategemea kabisa mipangilio ya wakala. Hii inamaanisha kuwa ili kufidia uwezekano mwingi wa kuamua anwani ya IP iwezekanavyo, unahitaji kuangalia yaliyomo ya anuwai ya anuwai: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, na haswa
Hatua ya 2
Unaweza kuchanganya kuangalia vigeuzi vyote vitatu kwenye mstari mmoja wa nambari ya PHP, kwa mfano, kama hii:
$ ipAddr = getenv ('HTTP_CLIENT_IP') au $ ipAddr = getenv ('HTTP_X_FORWARDED_FOR') au $ ipAddr = getenv ('REMOTE_ADDR');
Baada ya kupata dhamana ya anwani ya IP kwa njia hii, inashauriwa kuifuta kutoka kwa upotovu unaowezekana na wahusika wasio wa lazima. Unaweza kutumia usemi wa kawaida kwa hii:
$ ipAddr = trim (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ ipAddr));
Hatua ya 3
Inabaki kuchanganya mistari yote miwili ya nambari katika kazi moja:
kazi GetIP () {
$ ipAddr = getenv ('HTTP_CLIENT_IP') au $ ipAddr = getenv ('HTTP_X_FORWARDED_FOR') au $ ipAddr = getenv ('REMOTE_ADDR');
kurudi trim (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ ipAddr));
}