Несмотря на EU GDPR, помните, что юридическая юрисдикция суда будет той, которая указана в вашем соглашении «Условия использования» вашего сайта (или должно быть так или иначе).Что важно в законе, так это то, что владелец сайта приложил «добросовестные усилия», чтобы запретить сайт в этих странах-членах.
Учитывая, что ниже приведена многократно используемая функция PHP, которая использует 'ipAPI -api.com для возврата данных о местоположении на IP-адрес и сравнения его с белым списком текущих стран-членов ЕС.Белый список легко поддерживать, и это хорошо, поскольку страны, входящие и выходящие из ЕС, находятся в постоянном движении.Белый список был составлен 24 июля 1018 года, данные которого были проверены между официальным сайтом ЕС и Википедией.API «ip-api.com» является бесплатным для личного использования (контакт для коммерческого использования), а также может быть запущен с вашего локального сервера, без регистрации или требования домена.
function inEU($ip_input){
// Validate the IP address
if (filter_var($ip_input, FILTER_VALIDATE_IP) === false){
// Not a valid IP address - build error response
$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;
}
// Array of country names and country codes of European Union member countries
$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; // Build query URL for IP to JSON Data request
$ip_data_fetched = file_get_contents($query_url); // Return IP Data JSON as a string
$ip_data_fetched = utf8_encode($ip_data_fetched); // Encode returned JSON string to utf-8 if needed
$ip_data = json_decode($ip_data_fetched); // Decode utf-8 JSON string as PHP object
// Get the Country and Country Code for the IP from the returned data
$country = $ip_data->country; // Country Name (i.e; 'United States')
$countryCode = $ip_data->countryCode; // Country Code (i.e; 'US')
// Check the EU members array for match to either country or country code
$in_EU = false; // Ref for function boolean value returned - set false
$num_members = count($eu_members); // Number of indexes in EU members array (not # of 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 )){
// IP address IS in an EU country
}
else {
// IP address IS NOT in an EU country
}
Функция также выполняет перекрестную проверку возвращенных данных местоположения в том же цикле, поэтому, если в одной переменной была опечатка, она все равно находила бы местоположение, используя другую переменную.,И то, и другое неверно, вряд ли.
Эта функция может быть легко адаптирована для работы со многими другими IP-адресами и API определения местоположения, которые возвращают ответ JSON.Его также можно легко адаптировать как белый список «разрешено только», а не как «белый» список запретов.
Надеюсь, это поможет!