การกำหนดเมืองด้วย ip ใน php PHP - รับข้อมูลทางภูมิศาสตร์ของผู้ใช้โดย IP การกำหนดเมืองด้วย IP ใน PHP โดยใช้ไลบรารีทางเลือก

หากคุณกำลังจะสร้างสถิติผู้เยี่ยมชมเว็บไซต์ของคุณ คุณอาจต้องการทราบว่าผู้เยี่ยมชมของคุณมาจากประเทศใด คุณสามารถค้นหาประเทศของผู้เข้าชมได้จากที่อยู่ IP ของเขาและในบทความนี้เราจะดูวิธีการดำเนินการผ่าน PHP

มีสองวิธีในการค้นหาประเทศด้วยที่อยู่ IP ผ่าน PHP วิธีแรกคือการใช้บริการ WHOIS บางอย่าง ส่งคำขอและรับการตอบกลับ ตัวเลือกที่สองคือการสร้างตารางของคุณเองในฐานข้อมูลซึ่งจะมีการโต้ตอบระหว่างที่อยู่ IP และประเทศ ข้อดีข้อเสียของวิธีแรกและวิธีที่สองนั้นชัดเจน ดังนั้นฉันจะไม่ไปสนใจมันอีกต่อไป วิธีการใช้งานที่สองขึ้นอยู่กับฐานข้อมูลของคุณและในตารางซึ่งมีการติดต่อระหว่างที่อยู่ IP และประเทศ ดังนั้นเราจะพิจารณาวิธีแรกเนื่องจากเป็นวิธีสากลแม้ว่าคุณจะไม่สามารถทดสอบสคริปต์นี้บนเซิร์ฟเวอร์ท้องถิ่นได้หากไม่มีการเชื่อมต่ออินเทอร์เน็ต:

หลักการโดยย่อ: เราค้นหาบริการ ดูวิธีการส่งคำขอ (เรียกว่าตัวแปรอะไร วิธีการที่ใช้ในการส่ง) ส่งคำขอผ่าน cURL รับการตอบกลับ แยกบรรทัดที่ต้องการโดยใช้นิพจน์ทั่วไป และแสดงผล หากคุณเรียกใช้สคริปต์นี้ คุณจะเห็นชื่อประเทศที่ที่อยู่ IP ของคุณอยู่ อย่างไรก็ตาม เป็นที่น่าสังเกตว่า ไม่สามารถค้นหาประเทศสำหรับที่อยู่ IP ทุกรายการได้ ขึ้นอยู่กับฐานข้อมูลที่บริการ WHOIS ใช้ ฉันจะบอกทันทีว่าในการทดสอบสคริปต์นี้คุณต้องอัปโหลดไปยังเซิร์ฟเวอร์ระยะไกลเพื่อไม่ให้แทนที่ที่อยู่ IP: 127.0.0.1 เนื่องจากมันจะใช้งานไม่ได้เพราะไม่มีประเทศสำหรับมัน หรือเพียงแทนที่ค่าของตัวแปร $ip ด้วยที่อยู่ IP อื่น อย่างที่คุณเห็นทุกอย่างง่ายมาก สิ่งสำคัญที่นี่คือการเลือกหนึ่งในสองวิธีอย่างชัดเจน หากคุณต้องการค้นหาประเทศด้วยที่อยู่ IP ผ่านฐานข้อมูลของคุณ คุณต้องค้นหาประเทศนั้นก่อน มีค่อนข้างมากดังนั้นเพียงค้นหาบนอินเทอร์เน็ต และหากคุณพอใจกับการใช้บริการ WHOIS และประหยัดทรัพยากรเซิร์ฟเวอร์และพื้นที่ในฐานข้อมูล คุณสามารถใช้โค้ดด้านบนได้ และด้วยการแก้ไขนิพจน์ทั่วไป คุณสามารถดึงข้อมูลอื่น ๆ ที่บริการนี้สร้างขึ้นออกมาได้ เช่น เมือง

สวัสดีทุกคน!

ฉันจะไม่พูดแบบนั้นบ่อยๆ แต่ในบางครั้งนักพัฒนาจำเป็นต้องระบุเมืองด้วย IP ในสคริปต์ PHP

ตัวอย่างเช่น คุณตัดสินใจที่จะให้ผู้ใช้สามารถป้อนข้อมูลติดต่อได้ง่ายขึ้นเมื่อทำการสั่งซื้อในร้านค้าออนไลน์ หรือคุณต้องการตั้งค่าภาษาอินเทอร์เฟซของไซต์โดยขึ้นอยู่กับประเทศที่ผู้เยี่ยมชมมายังไซต์ของคุณ

บ่อยครั้งที่การกำหนดเมืองด้วย IP ใน PHP โดยใช้ GeoIP อาจจำเป็นสำหรับนักพัฒนาเครือข่ายโฆษณาต่างๆ เพื่อเสนอโฆษณาที่ตรงเป้าหมายให้กับผู้ใช้โดยขึ้นอยู่กับที่ตั้งทางภูมิศาสตร์ของพวกเขา

ตัวฉันเองจำเป็นต้องค้นหาประเทศด้วย IP ในสคริปต์ PHP เพียงครั้งเดียวเมื่อฉันตัดสินใจอัปโหลดวิดเจ็ตของเครือข่ายโซเชียลต่างๆไปยังไซต์สำหรับผู้ใช้จากประเทศต่างๆ ฉันจะเขียนเพิ่มเติมเกี่ยวกับสาเหตุที่ไม่จำเป็นและสิ่งที่เกิดขึ้นในตอนท้ายในบทความถัดไป

ในระหว่างนี้ เรามาพูดถึงว่ามีหลายวิธีในการกำหนดเมืองและประเทศด้วย IP ใน PHP และมีตัวเลือกใดบ้างสำหรับการนำไปใช้งาน

PHP GeoIP - ฟังก์ชันการทำงานมาตรฐานของบุคคลที่สาม

ฉันตั้งชื่อคำอธิบายของวิธีแรกโดยเฉพาะด้วยวิธีนี้ ความจริงก็คือใน PHP นั้นเป็นไปไม่ได้ที่จะระบุเมืองและประเทศตามที่อยู่ IP - ภาษาไม่มีเครื่องมือที่จำเป็นสำหรับสิ่งนี้
แต่เอกสารอย่างเป็นทางการมีคำแนะนำเกี่ยวกับวิธีการทำเช่นนี้

PHP GeoIP เป็นไลบรารีบุคคลที่สามที่จำเป็นต้องเชื่อมต่อเพิ่มเติมแม้ว่าคำอธิบายของฟังก์ชันที่รวมอยู่ในนั้นจะเป็นส่วนหนึ่งของเอกสาร PHP อย่างเป็นทางการ - http://php.net/manual/ru/ref.geoip .php

โดยหลักการแล้ว แรงจูงใจของนักพัฒนา PHP นั้นค่อนข้างชัดเจน

ประการแรก การรวมโมดูลนี้ไว้ในชุดภาษานั้นจำเป็นต้องใช้ทรัพยากรเซิร์ฟเวอร์จำนวนมาก

ประการที่สอง GeoIP PHP ทำงานตามรายการที่อยู่ IP ที่สอดคล้องกับประเทศและเมืองเฉพาะ ดังนั้น GeoIP PHP จึงต้องการการสนับสนุนและการขยาย/ปรับปรุงฐานข้อมูลที่มีอยู่อย่างต่อเนื่อง ซึ่งอาจทำให้นักพัฒนา PHP ปวดหัวเป็นพิเศษ

ประการที่สามการกำหนดเมืองด้วย IP ใน PHP เป็นคุณสมบัติที่ไม่ค่อยได้ใช้ในทางปฏิบัติ

ด้วยเหตุนี้เนื่องจากปัจจัยเหล่านี้ PHP GeoIP จึงเป็นส่วนขยายของบุคคลที่สามซึ่งการสนับสนุนและการสร้าง API สำหรับการรวมบนไซต์ที่มีอยู่นั้นดำเนินการโดย บริษัท MaxMind ซึ่งมีลิงก์อยู่ในคำอธิบาย ของห้องสมุดแห่งนี้

ฉันจะไม่อธิบายขั้นตอนการติดตั้งบนเซิร์ฟเวอร์เพราะ... ฉันยังไม่ได้ทำเช่นนี้ในทางปฏิบัติ และขณะนี้อินเทอร์เน็ตเต็มไปด้วยคู่มือสำหรับการติดตั้ง PHP GeoIP บนเซิร์ฟเวอร์ทั้ง Linux และ Windows

ฉันบอกได้แค่ว่าวิธีการระบุเมือง ประเทศ และข้อมูลทางภูมิศาสตร์อื่น ๆ ด้วย IP ใน PHP มีข้อเสียที่สำคัญสองประการ:

  • การเข้าถึงฐานข้อมูลข้อมูลที่สมบูรณ์เกี่ยวกับที่อยู่ IP ที่ MaxMind ให้ไว้นั้นได้รับค่าตอบแทน ยิ่งกว่านั้นจำนวนเงินเป็นดอลลาร์ซึ่งผิดปกติพอสมควร :) มีเพียงตัวเลือกที่ลดลงอย่างมากเท่านั้นที่ให้บริการฟรี - http://dev.maxmind.com/geoip/geoip2/geolite2/
  • เมื่อพิจารณาว่า PHP GeoIP เป็นส่วนขยายของบุคคลที่สาม จึงจำเป็นต้องติดตั้งแยกต่างหากบนเซิร์ฟเวอร์ ซึ่งอาจกลายเป็นเรื่องยากหากใช้โฮสติ้งที่ใช้ร่วมกัน แน่นอนคุณสามารถติดต่อฝ่ายสนับสนุนด้านเทคนิคได้ แต่พวกเขาไม่ได้ช่วยเหลือคุณ ตัวอย่างเช่น เมื่อฉันขอให้ติดตั้ง Sphinx ฉันถูกปฏิเสธ
  • การกำหนดเมืองด้วย IP ใน PHP โดยใช้ไลบรารีทางเลือก

    อีกวิธีหนึ่งในการค้นหาเมืองตาม IP ในสคริปต์ PHP คือการใช้ไลบรารีเซิร์ฟเวอร์สำรองและฐานข้อมูลข้อมูลสำหรับที่อยู่ IP อื่นที่ไม่ใช่ MaxMind

    แต่ก็มีข้อเสียเหมือนกับตัวเลือกก่อนหน้าเพราะ... เป็นเพียงคู่แข่งของ MaxMind การเข้าถึงฐานข้อมูลและความสามารถในการใช้ API ก็ได้รับค่าตอบแทนเช่นกัน ฟรี คุณจะได้รับรายชื่อประเทศและเมืองตาม IP เท่านั้น ในขณะที่แผนแบบชำระเงินคุณจะได้รับรายการข้อมูลที่กว้างขึ้น

    ข้อได้เปรียบเพียงอย่างเดียวของ PHP GeoIP คือไลบรารีเหล่านี้รวมอยู่ในโค้ด PHP และไม่ได้อยู่ที่ระดับเซิร์ฟเวอร์ เช่น สามารถใช้กับโฮสติ้งที่ใช้ร่วมกันได้

    ตัวอย่างของไลบรารีดังกล่าวมีให้โดยบริการ db-ip.com

    อย่างไรก็ตาม บริการที่ฉันกล่าวถึงไม่เพียงแต่ให้ไลบรารี PHP สำหรับรับข้อมูลทางภูมิศาสตร์จาก IP ไคลเอนต์เท่านั้น แต่ยังเข้าถึงฐานข้อมูลข้อมูลตามที่อยู่อีกด้วย ตามหลักการแล้ว ไม่มีใครหยุดคุณไม่ให้ใช้ API เหล่านี้ใน PHP GeoIP แต่รับข้อมูลจากแหล่งอื่น

    และแน่นอนว่าไม่มีใครหยุดคุณไม่ให้เขียนโปรแกรมแยกวิเคราะห์ไฟล์ฐานข้อมูลที่อยู่ IP ของคุณเองเพื่อรับข้อมูลจากพวกเขาด้วยตัวเองโดยไม่ได้รับอนุญาตจากบุคคลที่สาม

    วิธีระบุเมืองด้วย IP ใน PHP ออนไลน์

    ตอนนี้ฉันมาถึงวิธีสุดท้ายในการค้นหาประเทศด้วย IP ใน PHP และข้อมูลทางภูมิศาสตร์อื่น ๆ ซึ่งฉันเองได้ใช้ในทางปฏิบัติแล้ว

    ประกอบด้วยการใช้บริการออนไลน์ API ที่ให้คุณรับข้อมูลตามที่อยู่ IP ออนไลน์

    ฉันตัดสินใจระบุเมืองด้วย IP ใน PHP โดยใช้วิธีนี้เพราะ... มันปราศจากข้อเสียเปรียบหลักของอันก่อนหน้านี้ กล่าวคือเป็นวิธีที่ง่ายที่สุดในการติดตั้ง - คุณไม่จำเป็นต้องติดตั้งหรือกำหนดค่าใดๆ บนเซิร์ฟเวอร์ และยิ่งไปกว่านั้น โปรดขอการสนับสนุนทางเทคนิคของโฮสติ้งที่ใช้ร่วมกันสำหรับสิ่งนี้

    เพื่อให้ได้ข้อมูลที่จำเป็นผ่านทาง IP คุณเพียงแค่ต้องส่งคำขอไปยัง URL ที่ระบุและดำเนินการตอบกลับ

    ส่วนค่าใช้ก็จ่ายซะส่วนใหญ่ด้วย เพราะ... ตามกฎแล้วทำงานบนพื้นฐานของฐานข้อมูล IP เชิงพาณิชย์ที่มีอยู่ แต่ยังมีบริการฟรีที่ให้ข้อมูลที่สมบูรณ์พอๆ กับบริการเชิงพาณิชย์ แต่สามารถรับได้ไม่จำกัดจำนวน

    จริงอยู่พวกมันหยุดดำรงอยู่อย่างรวดเร็วผิดปกติเพราะ เป็นเรื่องยากมากที่จะอยู่รอดด้วยการให้บริการดังกล่าว สิ่งนี้แสดงให้เห็นโดยการวิเคราะห์บริการออนไลน์ฟรีของฉันเพื่อระบุเมืองและประเทศตาม IP ซึ่งฉันดำเนินการเพื่อวัตถุประสงค์ส่วนตัว พวกมันปรากฏอยู่ในหลาย ๆ ไซต์ แต่เมื่อคุณพยายามใช้มัน เห็นได้ชัดว่าพวกมันหยุดมีอยู่แล้ว

    ในที่สุดฉันก็พบสิ่งที่ต้องการซึ่งเป็นสิ่งที่ฉันต้องการตัดสินใจร่วมกับคุณ - http://www.geoplugin.com/

    บริการนี้ช่วยให้คุณระบุเมืองและข้อมูลอื่น ๆ ตาม IP บนเว็บไซต์บริการและดำเนินการได้จากโค้ด ต่อไป ฉันจะยกตัวอย่างการกำหนดประเทศด้วย IP ในสคริปต์ PHP โดยใช้ geoplugin.com รหัสดำเนินการโดยใช้รหัสที่อธิบายไว้ในบทความที่ลิงค์

    อย่างที่คุณเห็น สาระสำคัญของโค้ดข้างต้นคือการกำหนดที่อยู่ IP ของลูกค้า โดยคำนึงถึงความเป็นไปได้ในการเชื่อมต่อผ่านพร็อกซี และส่งคำขอผ่าน GeoPlugin API พร้อมการถอดรหัสและการวิเคราะห์ผลลัพธ์เพิ่มเติม

    ในตัวอย่างของฉัน อย่างที่ฉันบอกไปแล้ว ผลลัพธ์ของสคริปต์นี้จะเป็นรหัสประเทศของไคลเอนต์ไซต์ โดยทั่วไป รายการพารามิเตอร์ที่ส่งคืนทั้งหมดจะมีลักษณะดังนี้ (ตัวอย่างเช่น ฉันตัดสินใจรับ IP ของภูมิภาคโนโวซีบีร์สค์ของสหพันธรัฐรัสเซีย):

    ( "geoplugin_request": "195.208.128.3", "geoplugin_status":200, "geoplugin_credit":ข้อมูลที่ส่งคืนบางส่วนมีข้อมูล GeoLite ที่สร้างโดย MaxMind ซึ่งหาได้จาก http:\/\/www.maxmind.com", "geoplugin_city": "โนโวซีบีสค์", "geoplugin_region" "โนโวซีบีสค์", "geoplugin_areaCode" "0", "geoplugin_dmaCode" "0", "geoplugin_countryCode": "RU", "geoplugin_countryName":สหพันธรัฐรัสเซีย", "geoplugin_continentCode": "EU", "geoplugin_latitude: "55.09", "geoplugin_longitude": 82.6519 ", "geoplugin_regionCode": "53", "geoplugin_regionName": โนโวซีบีสค์", "geoplugin_currencyCode": "RUB", "geoplugin_currencySymbol": rub ", "geoplugin_currencySymbol_UTF8": "\u0440\u0443\u0431", "geoplugin_currencyConverter":58.9289 )

    อย่างที่คุณเห็นบริการนี้ใช้ MaxMind ที่กล่าวถึงก่อนหน้านี้ (พารามิเตอร์ geoplugin_credit) แต่การคาดเดาข้อมูลนั้นยากหรือไม่ ในอีกด้านหนึ่ง ลิงก์ไปยังแหล่งที่มาระบุว่ามีการใช้การเข้าถึงฐานข้อมูล IP ฟรี แต่ในทางกลับกัน เราไม่เพียงเห็นประเทศและเมืองเท่านั้น แต่ยังมีข้อมูลอื่น ๆ อีกมากมาย รวมถึงเมือง ภูมิศาสตร์ พิกัด พิกัด (แลงจิจูด ละติจูด) สกุลเงินปัจจุบัน และแม้กระทั่งอัตราแลกเปลี่ยน

    ดังนั้นบริการนี้สามารถเรียกว่า PHP GeoIP ออนไลน์ได้ ข้อแตกต่างเพียงอย่างเดียวจากเซิร์ฟเวอร์คู่กันคือ รับข้อมูลผ่าน IP ช้ากว่าเล็กน้อยเนื่องจากขาดการแคชเซิร์ฟเวอร์ แต่นี่ไม่ได้หมายความว่าไม่ได้อยู่บนเซิร์ฟเวอร์ GeoPlugin 😉 ดังนั้นข้อเสียเปรียบนี้จึงค่อนข้างเป็นสัญลักษณ์

    ไม่ว่าในกรณีใด นักพัฒนา GeoPlugin สมควรได้รับเสียงปรบมือ และโดยเฉพาะอย่างยิ่ง ความจริงที่ว่าพวกเขาไม่ได้ทำให้ไซต์ของตนยุ่งเหยิงด้วยการโฆษณาตามบริบทด้วยซ้ำ เหล่านั้น. พวกเขามีชีวิตรอดได้อย่างไรยังไม่ชัดเจน วิธีเดียวที่จะกล่าว "ขอบคุณ" กับพวกเขาได้คือการบริจาคเงินเข้าบัญชี PayPal ของคุณ

    อย่างไรก็ตาม รหัส PHP ที่ฉันให้ไว้เพื่อกำหนดเมืองตาม IP นั้นเป็นรหัสสากล คุณสามารถใช้มันเพื่อรับข้อมูลทางภูมิศาสตร์โดยใช้บริการอื่น ๆ สิ่งเดียวที่คุณจะต้องเปลี่ยนคือ URL API ของบริการและชื่อของพารามิเตอร์ที่จำเป็นซึ่งคุณจะต้องได้รับ

    นั่นคือทั้งหมดที่ฉันมี เขียนความคิดเห็นของคุณเกี่ยวกับบทความในความคิดเห็นด้านล่างและอย่าลืมแบ่งปันโพสต์กับเพื่อน ๆ ของคุณบนโซเชียลเน็ตเวิร์ก

    ป.ล. : หากคุณต้องการเว็บไซต์หรือต้องการเปลี่ยนแปลงเว็บไซต์ที่มีอยู่ แต่ไม่มีเวลาหรือต้องการสิ่งนี้ ฉันสามารถให้บริการได้

    ประสบการณ์มากกว่า 5 ปีในการพัฒนาเว็บไซต์อย่างมืออาชีพ การทำงานกับ PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular และเทคโนโลยีการพัฒนาเว็บไซต์อื่น ๆ

    มีประสบการณ์ในการพัฒนาโครงการในระดับต่างๆ: หน้า Landing Page, เว็บไซต์องค์กร, ร้านค้าออนไลน์, CRM, พอร์ทัล รวมถึงการสนับสนุนและพัฒนาโครงการ HighLoad ส่งใบสมัครของคุณทางอีเมล [ป้องกันอีเมล].

    ดำเนินการต่อในหัวข้อเกี่ยวกับ IP บทความนี้จะพิจารณาวิธีการระบุประเทศ เมือง และข้อมูลทางภูมิศาสตร์อื่น ๆ เกี่ยวกับผู้ใช้ตาม IP ของเขา

    GeoIP เป็นส่วนขยาย PHP

    อาจเป็นไลบรารี่ที่ใช้กันมากที่สุดในการกำหนด IP (office doc บน php.net) ไม่น่าแปลกใจเลยเพราะฐานข้อมูลไบนารี่ + ส่วนขยาย PHP ที่คอมไพล์แล้วทำงานได้เร็วกว่าวิธีอื่นๆ ทั้งหมด

    การติดตั้งบนเซิร์ฟเวอร์ Ubuntu:

    Sudo apt-get ติดตั้ง php5-geoip

    หลังการติดตั้ง ให้ดาวน์โหลดการอัพเดตล่าสุดไปยังฐานข้อมูลที่อยู่ IP:

    หลังจากขั้นตอนเหล่านี้ คุณจะต้องรีสตาร์ท PHP นี่เป็นสิ่งจำเป็นสำหรับล่าม PHP เพื่อโหลดส่วนขยายที่ติดตั้งใหม่ (php5-geoip) และฐานข้อมูลที่อยู่ IP ใหม่

    นอกจากนี้ยังจำเป็นต้องอัปเดตฐานข้อมูลที่อยู่ IP เป็นระยะ:

    Sudo wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz sudo gunzip GeoIP.dat.gz sudo mv GeoIP.dat /usr/share/GeoIP/

    หลังจากการอัพเดต คุณจะต้องรีสตาร์ท PHP เพื่อใช้ฐานข้อมูลที่อยู่ IP ที่อัพเดต:

    Sudo service php5-fpm restart # ถ้าคุณใช้ NGINX # หรือ sudo service apache2 restart # ถ้าคุณใช้ Apache

    เมื่อติดตั้ง GeoIP แล้ว จะสามารถใช้เป็นโค้ดได้ดังนี้: