1.使用composer安装composer require ip2location/ip2location-php
2.引用文件,最重要的路径引入的时候一定要正确
3.一开始文件放在项目的入口文件index.php调试,但是遇到了许多的问题,根本原因就是跟thinPHP里面的自动加载机制有冲突,所以需要新加一个PHP的文件,在这个新建的PHP文件写,然后在入口文件引入就可以了。
$basePath = dirname(dirname(__DIR__));//获取的目录是E:\Wampee-3.1.0-beta-3.5\www\1688order
$base_path = $basePath . '/vendor/ip2location/ip2location-php/IP2Location.php';
$bin_path = $basePath . '/vendor/ip2location/ip2location-php/databases/IP2LOCATION-LITE-DB1.BIN';
require_once $base_path;
$db = new \IP2Location\Database( $bin_path, \IP2Location\Database::FILE_IO);
// 2. 获取客户端 IP
$client_ip = getClientIP();
if ($client_ip == '127.0.0.1'){
return true;
}
$records = $db->lookup($client_ip, \IP2Location\Database::ALL);
$country_code = $records['countryCode'] ?? null;
// 1. 允许访问的国家代码列表
$allowed_countries = ['US', 'CA', 'BR', 'FR', 'GB', 'IT', 'ES', 'DE','CN','PT','AU','BE','NL','MX','NG'];
// 5. 判断是否允许访问
if (!in_array($country_code, $allowed_countries, true)) {
// 拦截访问
header('HTTP/1.1 403 Forbidden');
echo 'Access denied for your region.';
exit;
}
// 以下是正常业务逻辑
// =====================
//echo "Welcome! Country: {$country_code}";
// 获取真实客户端 IP 的函数
function getClientIP()
{
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
return $_SERVER['HTTP_CF_CONNECTING_IP']; // Cloudflare
}
if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
return $_SERVER['HTTP_X_REAL_IP'];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
return trim($ips[0]);
}
return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
}