آموزش شناسایی کشور کاربر در سایت با php

zegersot

کاربر عضو
سلام

این دفع اومدم با یه پروژه ساده و پر کاربرد

همونجور که قولشو داده بودم و هم از عنوان پست مشخصه میخوام آموزش بررسی کشور ای پی و محدود کردن کاربران خارجی و یا هر کشوری که مد نظر شماس انجام دهیم

نکته: سئوال یا مشکلی داشتید توی موضوع جدید اعلام کنید

سعی میکنم آموزش رو ساده و کامل توضیح بدم

اگه وقتم آزاد شه سعی میکنم زود این آموزشو کامل کنم و به تمامی کاربرای پرشین اسکریپت تقدیم کنم :53:

 

zegersot

کاربر عضو
روش اول:

خوب این آموزش بر اساس تابع ای که کاربر انجمن (IReza) معرفی کردند میدهم.

بریم سر اصل مطلب : :76:

کد زیر رو ببنید


کد:
<?php
$ip=$_SERVER['REMOTE_ADDR'];
if(visitor_country($ip)=='IR')
echo "خوش آمدید";
else
echo "welcome";
function visitor_country($ip) {
$data_api = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
$coutry = $data_api -> geoplugin_countryCode;
return $coutry;
}
?>
خط 2 : ما ایپی کاربر مورد نظرو میگیریم که بعضی موقع ها این کد ای پی سرور خودتونو برمیگردونه که با دستور زیر میتونید این مشکلو حل کنید


کد:
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
خط 3: بررسی میکنه که کاربر مورد نظر ایرانیه یا نه ،تابعه ای که در خط 7 تا 10 نوشته شده کارش همینه

خط 4 و 6 : خروجی هایی هست که به شرط مربوط میشه

در خط 9 خروجی رو تعریف میکنید مثلا من اومدم خروجی 2 حروفی کشور مورد نظر با "geoplugin_countryCode" مشخص کردم

مثلا شما میخواید نام شهر کاربر رو چاپ کنه باید به جایی "geoplugin_countryCode" از این استفاده کنید "geoplugin_city"

که دیگه از شرط استفاده نمیکنید چون نیازی بهش نیست و خط 3 تا 6 رو بیخیال میشید و بجاش از این استفاده میکنید


کد:
echo visitor_country($ip);
انشالله این آموزش گویا و قابل فهم باشه و بدردتون بخوره :48:

قسمت دوم آموزش درصورت نیاز و درخواست ها ارائه میشه چون همین کارتونو رامیندازه

موفق باشید :53:

 

saeed_g21

تازه وارد
سلام دوستان وقتی کسی با وی پی ان وصل بشه دیگه کشورش درست دریافت نخواهد شد برای این مسئله چه راه حلی پیشنهاد میکنید ؟

 

MahdiY

راهبر انجمن
فکر نمیکنم بشه

چون دیگه اون با یه آی پی دیگه به سرور وصل میشه

سرور که حس ششم و علم غیب نداره!

 

william

کاربر عضو
سلام دوستان وقتی کسی با وی پی ان وصل بشه دیگه کشورش درست دریافت نخواهد شد برای این مسئله چه راه حلی پیشنهاد میکنید ؟
میشه فهمید کاربر از پراکسی استفاده میکنه یا نه.

یک روش (که البته برای پراکسی های anonymous کاربردی نداره):


کد:
function isUserUsing*****() {
    $*****_headers = array(
        'HTTP_VIA',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_FORWARDED',
        'HTTP_CLIENT_IP',
        'HTTP_FORWARDED_FOR_IP',
        'VIA',
        'X_FORWARDED_FOR',
        'FORWARDED_FOR',
        'X_FORWARDED',
        'FORWARDED',
        'CLIENT_IP',
        'FORWARDED_FOR_IP',
        'HTTP_*****_CONNECTION'
    );
    foreach($*****_headers as $x){
        if (isset($_SERVER[$x])) return true;
    }
}
 
بالا