Xin chào tất cả anh em! Vẫn là lời chúc sức khỏe và thành công trong cuộc sống đến anh em nhé. Hôm trước mình xem topic này http://cafemmo.club/threads/hoi-cach-nhan-biet-region-user.2274/#post-25261, có bạn @VanLong hỏi về : Hỏi cách nhận biết Region user. Mình xin được phép chia sẻ và hướng dẫn như sau: Maxmind cung cấp sẵn cho chúng ta thư viện để xác định quốc gia và thành phố. Bạn có thể xem tại đây: https://github.com/maxmind : có đầy đủ cho các ngôn ngữ mà bạn thích dùng. Mình thì dùng PHP, và xin trình bày chi tiết như sau: 1. Tải thư viện của nó về: github. com/maxmind/GeoIP2-php Để tiện cho anh em, mình Composer về sẵn cho anh em download luôn. drive. google. com/open?id=180ysHkYHQvm__3d0dXSEBcpGwJt5R-yW Anh em download về và giải nén ra sẽ có thư mục vendor. 2. Tải databases của nó về đã nhé: dev. maxmind .com/geoip/geoip2/geolite2/ Anh em tải cái link mình bôi chuột đen đó. Và giải nén ra. File sau khi tải về sẽ tên là GeoLite2-City_20190820.tar.gz (chú ý là mình tải về ngày hôm nay 27/08/2019). Nhưng data là ngày 2019-08-20 : đó là vì maxmind cập nhật mỗi tuần 1 lần. Nếu bạn cần data mới nhất thì hãy download hàng tuần nhé. (mình thì vài tháng mới cập nhật databases vì bận, và không cần phải chính xác 100%) Anh em giải nén ra nhé, chú ý cái quan trọng nhất là file GeoLite2-City.mmdb 3. Test thử xem nào( bạn có thể chạy trên localhost, hoặc VPS) Chú ý phần chạy trên localhost thì với ip cần xác định là 127.0.0.1, hoặc ::1 thì sẽ báo lỗi nhé. Private address rangen sẽ không cho kết quả được. City Example <?php require_once 'vendor/autoload.php'; use GeoIp2\Database\Reader; // This creates the Reader object, which should be reused across // lookups. $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb'); // Replace "city" with the appropriate method for your database, e.g., // "country". $record = $reader->city('128.101.101.101'); print($record->country->isoCode . "\n"); // 'US' print($record->country->name . "\n"); // 'United States' print($record->country->names['zh-CN'] . "\n"); // '美国' print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota' print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN' print($record->city->name . "\n"); // 'Minneapolis' print($record->postal->code . "\n"); // '55455' print($record->location->latitude . "\n"); // 44.9733 print($record->location->longitude . "\n"); // -93.2323 ?> Chú ý: vendor là thư mục bạn tải từ drive. google. com/open?id=180ysHkYHQvm__3d0dXSEBcpGwJt5R-yW /usr/local/share/GeoIP/GeoIP2-City.mmdb : là đường đẫn file databases anh em tải về từ geolite. maxmind. com/download/geoip/database/GeoLite2-City.tar.gz Chú ý đường dẫn nhé. Nhận xét: databases là miễn phí, và theo thông tin từ maxmind. com thì nó chỉ chuẩn xác khoảng 95%, bạn muốn chính xác 100% thì hãy mua nó nhé . Mình thì không cần chính xác tuyệt đối, 95% là quá tốt với mình rồi. Rất mong anh em góp ý và thảo luận. Cảm ơn anh em đã đọc và theo dõi P/s: Có thể nhiều anh em thắc mắc, nếu user dùng proxy hoăc cái gì đó để ẩn IP gốc thì làm thế nào. Phương án là chặn proxy thôi. Tuy nhiên việc chặn proxy thì không thể miễn phí, và phải mua. Và tỉ lệ chặn proxy cũng không thể chính xác tuyệt đối 100%. Phương án chặn proxy sẽ không bàn tại đây. Anh em yêu cầu sẽ có topic riêng về việc xác định và chặn proxy.