ส่วนใหญ่มักจะใช้ที่อยู่ IP ของผู้เยี่ยมชมเว็บไซต์เพื่อระบุตัวเขา แต่นอกเหนือจากนี้ เมื่อใช้ IP คุณจะได้รับข้อมูลเพิ่มเติมมากมายเกี่ยวกับผู้เข้าชม เช่น ค้นหาผู้ให้บริการอินเทอร์เน็ตและที่ตั้งทางภูมิศาสตร์ของเขา ในทางปฏิบัติ สคริปต์ PHP ฝั่งเซิร์ฟเวอร์มักใช้เพื่อแยกที่อยู่ IP จากส่วนหัวของคำขอที่ส่งโดยเบราว์เซอร์
มันจำเป็น
ความรู้พื้นฐาน PHP
คำแนะนำ
ขั้นตอนที่ 1
ใช้ฟังก์ชัน getenv ในตัวของ PHP เพื่ออ่านที่อยู่ IP จากอาร์เรย์ตัวแปรสภาพแวดล้อม superglobal ในกรณีที่ง่ายที่สุด การอ่านตัวแปรชื่อ REMOTE_ADDR ก็เพียงพอแล้ว โค้ด PHP ที่เกี่ยวข้องกันอาจมีลักษณะดังนี้: $ userIP = getenv ('REMOTE_ADDR');
ขั้นตอนที่ 2
นอกจากตัวแปร REMOTE_ADDR ที่ส่งในคำขอแล้ว ให้ตรวจสอบตัวแปร HTTP_VIA และ HTTP_X_FORWARDED_FOR หากผู้เยี่ยมชมใช้พร็อกซีเซิร์ฟเวอร์ ที่อยู่กลางจะต้องถูกบันทึกในตัวแปรทั้งสอง - ทั้งใน HTTP_VIA และ REMOTE_ADDR ในกรณีนี้ คุณสามารถลองค้นหา IP จริงของผู้เยี่ยมชมผ่าน HTTP_X_FORWARDED_FOR - พร็อกซีเซิร์ฟเวอร์จะต้องใส่ที่อยู่เดิมลงไป อย่างไรก็ตาม สิ่งนี้ไม่ได้ทำเสมอไป และผู้ใช้มีโอกาสเลือกพร็อกซีเซิร์ฟเวอร์ "ทึบ" ที่ไม่ส่ง IP เดิมของผู้เยี่ยมชมที่ส่งคำขอ ไม่ว่าในกรณีใด คุณควรใช้วิธีต่างๆ ให้ได้มากที่สุดเพื่อรับที่อยู่ IP ดั้งเดิมในโค้ดของคุณโดยเพิ่มการตรวจสอบตัวแปร
ขั้นตอนที่ 3
เชื่อมต่อโค้ด PHP หนึ่งบรรทัดเพื่อตรวจสอบตัวแปรสภาพแวดล้อมสามตัวตามลำดับ ซึ่งอาจมีที่อยู่ IP ดั้งเดิมของผู้เยี่ยมชม ซึ่งสามารถทำได้ ตัวอย่างเช่น: $ userIP = getenv ('HTTP_CLIENT_IP') OR $ userIP = getenv ('HTTP_X_FORWARDED_FOR') OR $ 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));
}