尽管欧盟GDPR存在,但请记住法院的法律管辖权将是您网站自己的“使用条款”协议中所述(或者应该是这种情况)。在法律上重要的是,网站所有者已经做出了“善意努力”,禁止那些成员国的网站。
鉴于此,以下是一个可重复使用的PHP函数,它使用“ip-api.com”API返回IP的位置数据并检查其是否与当前欧盟成员国的白名单匹配。白名单易于维护,这很好,因为进入和离开欧盟的国家处于不断变化之中。白名单是在2018年7月24日根据欧盟官方网站和维基百科的数据交叉核对而编制的。“ip-api.com”API可供个人免费使用(商业用途请联系),也可以从本地服务器运行,无需注册或域名要求。
function inEU($ip_input){
if (filter_var($ip_input, FILTER_VALIDATE_IP) === false){
$message_string =
'<div style="width:100%; margin-top:50px; text-align:center;">'.
'<div style="width:100%; font-family:arial,sans-serif; font-size:24px; color:#c00; centered">'.
'ERROR: <span style="color:#fd0">Invalid IP Address</span>'.
'</div>'.
'</div>';
echo $message_string;
exit;
}
$eu_members = array(
'Austria','AT', 'Belgium','BE', 'Bulgaria','BG',
'Croatia','HR', 'Cyprus','CY', 'Czech Republic','CZ',
'Denmark','DK', 'Estonia','EE', 'Finland','FI',
'France','FR', 'Germany','DE', 'Greece','GR',
'Hungary','HU', 'Ireland','IE', 'Italy','IT',
'Latvia','LV', 'Lithuania','LT', 'Luxembourg','LU',
'Malta','MT', 'Netherlands','NL', 'Netherlands Antilles','AN',
'Poland','PL', 'Portugal','PT', 'Romania','RO',
'Slovakia','SK', 'Slovenia','SI', 'Spain','ES',
'Sweden','SE', 'United Kingdom','GB','UK'
);
$query_url = 'http://ip-api.com/json/'.$ip_input;
$ip_data_fetched = file_get_contents($query_url);
$ip_data_fetched = utf8_encode($ip_data_fetched);
$ip_data = json_decode($ip_data_fetched);
$country = $ip_data->country;
$countryCode = $ip_data->countryCode;
$in_EU = false;
$num_members = count($eu_members);
for ($i = 0; $i < $num_members; $i++){
$lc_eu_members = strtolower($eu_members[$i]);
if ($lc_eu_members === strtolower($country) || $lc_eu_members === strtolower($countryCode)){
$in_EU = true;
break;
}
}
return $in_EU;
}
而要使用该函数...
if (inEU( $ip )){
}
else {
}
该函数还在同一循环中交叉检查返回的位置数据,因此如果一个变量中有错别字,它仍然可以使用另一个变量找到位置。两个变量都错误的可能性不大。
该函数可以轻松地适应许多其他返回JSON响应的IP到位置API。它也可以很容易地被调整为“允许白名单”,而不是“禁止白名单”。
希望这可以帮助到您!