گاهی اوقات نیاز است تا بدانیم که کاربر از چه کشوری وارد سایت ما شده است. برای مثال اگر بخواهیم خدماتمان را به کشور خاصی محدود کرده و یا کشوری را منع کنیم؛ یا آنکه بخواهیم به کاربر اطلاع دهیم که وبسایت ما ترافیک دانلود نیمبها داشته و درصورت استفاده از فیلترشکن، میتواند آن را خاموش کند.
قطعه کد
تابع زیر، علاوه بر بدست آوردن کشور مربوط به یک آیپی، میتواند اطلاعات دیگری را نیز در بر داشته باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) { $output = NULL; if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) { $ip = $_SERVER["REMOTE_ADDR"]; if ($deep_detect) { if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_CLIENT_IP']; } } $purpose = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose))); $support = array("country", "countrycode", "state", "region", "city", "location", "address"); $continents = array( "AF" => "Africa", "AN" => "Antarctica", "AS" => "Asia", "EU" => "Europe", "OC" => "Australia (Oceania)", "NA" => "North America", "SA" => "South America" ); if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) { $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)); if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) { switch ($purpose) { case "location": $output = array( "city" => @$ipdat->geoplugin_city, "state" => @$ipdat->geoplugin_regionName, "country" => @$ipdat->geoplugin_countryName, "country_code" => @$ipdat->geoplugin_countryCode, "continent" => @$continents[strtoupper($ipdat->geoplugin_continentCode)], "continent_code" => @$ipdat->geoplugin_continentCode ); break; case "address": $address = array($ipdat->geoplugin_countryName); if (@strlen($ipdat->geoplugin_regionName) >= 1) $address[] = $ipdat->geoplugin_regionName; if (@strlen($ipdat->geoplugin_city) >= 1) $address[] = $ipdat->geoplugin_city; $output = implode(", ", array_reverse($address)); break; case "city": $output = @$ipdat->geoplugin_city; break; case "state": $output = @$ipdat->geoplugin_regionName; break; case "region": $output = @$ipdat->geoplugin_regionName; break; case "country": $output = @$ipdat->geoplugin_countryName; break; case "country_code": $output = @$ipdat->geoplugin_countryCode; break; } } } return $output; } |
ورودیها:
- ip: آی پی مورد نظر که اگر مقدار آن یک آی پی صحیح نباشد، آی پی کاربر بازدید کننده از سایت درنظر گرفته خواهد شد.
- purpose: هدف چیست؟! در حال حاظر میتواند مقادیر رشتهای زیر را در بربگیرید:
- location: اطلاعاتی را در یک آرایه برمیگرداند که شامل city و state و country و country_code و continent و continent_code میباشد.
- address: آدرس را برمیگرداند. (ممکن است تشخیص نداده و خالی باشد)
- city: نام شهر را برمیگرداند. (ممکن است تشخیص نداده و خالی باشد)
- state: نام منطقه را برمیگرداند. (ممکن است تشخیص نداده و خالی باشد)
- region: مثل مقدرا قبل. میتواند این مورد را از داخل کد حذف کنید.
- country: نام کشور را برمیگرداند. مثل Iran
- country_code: کد کشور را برمیگرداند. مثل IR
- deep_detect: اگر آیپی صحیح نباشد، اسکن دقیقی برروی بدست آوردن آیپی دقیق انجام شود.
مثال 1
در اینجا قصد داریم تا اطلاعات مختلفی را برای آی پی بازدید کننده بدست آوریم. مقدار Visitor یک مقدار دلخواه است تا داخل تابع درست تشخیص داده نشده و خود تابع آیپی بازدیدکننده را در نظر بگیرید. مقابل هرکدام یک خروجی مثال زده شده است که میتواند با توجه به آی پی، چیز دیگری باشد.
1 2 3 4 5 6 7 8 9 10 11 |
<?php echo ip_info("Visitor", "country"); // India echo ip_info("Visitor", "country_code"); // IN echo ip_info("Visitor", "state"); // Andhra Pradesh echo ip_info("Visitor", "city"); // Proddatur echo ip_info("Visitor", "address"); // Proddatur, Andhra Pradesh, India print_r(ip_info()); // Array ( [city] => Proddatur [state] => Andhra Pradesh [country] => India [country_code] => IN [continent] => Asia [continent_code] => AS ) ?> |
مثال 2
در اینجا برای یک آیپی خاصی عملیات انجام شده است:
1 2 3 4 5 6 7 8 9 10 11 |
<?php echo ip_info("173.252.110.27", "country"); // United States echo ip_info("173.252.110.27", "country_code"); // US echo ip_info("173.252.110.27", "state"); // California echo ip_info("173.252.110.27", "city"); // Menlo Park echo ip_info("173.252.110.27", "address"); // Menlo Park, California, United States print_r(ip_info("173.252.110.27", "location")); // Array ( [city] => Menlo Park [state] => California [country] => United States [country_code] => US [continent] => North America [continent_code] => NA ) ?> |
نظرات ثبت شده بدون دیدگاه