PDA

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



rezah
November 23rd, 2016, 22:23
سلام
من میخوام کاربر که میاد داخل سایتم از رو ای پی کاربر بفهمه از کدوم کشوره ( که تا اینجاشو بلدم ) فقط میخوام بعد مثلا اگه از کشور x بود بره به صفحه xw و اگه از کشورا دیگه بود بره به صفحه y
میخواستم بدونم چجوری میتونم چنین چیزی پیاده سازی کنم؟

Rezash
November 23rd, 2016, 23:13
مقداری از کدتون رو بزارید تا بشه راهنمایی کرد
اگر با شناسایی کشور مشکلی ندارید و مثلا کشور رو در متغیر country دارید میتونید اینجوری عمل کنید :

<?php
if( $country == 'country1' )
{
header( "Location: page1.php" );
exit();
}
else if( $country == 'country2' )
{
header( "Location: page2.php" );
exit();
}

rezah
November 23rd, 2016, 23:22
مقداری از کدتون رو بزارید تا بشه راهنمایی کرد
اگر با شناسایی کشور مشکلی ندارید و مثلا کشور رو در متغیر country دارید میتونید اینجوری عمل کنید :

<?php
if( $country == 'country1' )
{
header( "Location: page1.php" );
exit();
}
else if( $country == 'country2' )
{
header( "Location: page2.php" );
exit();
}


تشکر فقط یه چیز دیگه
من در اصل لیست رنج ای پی های ایران را گیر اوردم اگه بخوام بر اساس ای پی این کارو کنم چجوری بکنم؟
مثلا یه تیکه از لیست ای پی ها این شکلیه:
deny from 2.144.0.0/14
deny from 2.176.0.0/12
deny from 5.22.0.0/17
deny from 5.22.192.0/19
deny from 5.23.112.0/21
deny from 5.28.32.0/21
deny from 5.34.192.0/19
deny from 5.52.0.0/16
deny from 5.53.32.0/19
deny from 5.56.128.0/22
deny from 5.56.132.0/24
deny from 5.56.135.0/24
deny from 5.57.32.0/21
deny from 5.61.24.0/23
deny from 5.61.26.0/24
deny from 5.61.29.0/24
deny from 5.61.30.0/23
deny from 5.61.72.0/21
deny from 5.62.160.0/19
deny from 5.62.192.0/18
deny from 5.63.8.0/21
deny from 5.72.0.0/14
deny from 5.78.0.0/16
deny from 5.102.32.0/20
deny from 5.106.0.0/16
اینا مخصوص .htacess هست که مسدود سازی ای پی ایران باشه ولی نیاز من این نیست میخوام ای پی اینا بود اون اتفاق بیوفته

Rezash
November 24th, 2016, 00:05
آپدیت نگه داشتن رنج آی پی ها اصلا کار ساده ای نیست
میتونید از سرویس های پولی سایت هایی مثلip2location استفاده کنید که مدام آپدیت میدند
یا اینکه کار خودتون رو ساده کنید و از api های اماده استفاده کنید و نگرانی از آدیت کردن دیتابیس رو نداشته باشید
مثلا ادرس
http://www.geoplugin.net/php.gp?ip=1111
که به جای ۱۱۱۱ آی پی مورد نظر رو میدید واطلاعات رو میده
و موارد مشابه خیلی زیادی که بگردید توی نت هست

rezah
November 24th, 2016, 00:19
آپدیت نگه داشتن رنج آی پی ها اصلا کار ساده ای نیست
میتونید از سرویس های پولی سایت هایی مثلip2location استفاده کنید که مدام آپدیت میدند
یا اینکه کار خودتون رو ساده کنید و از api های اماده استفاده کنید و نگرانی از آدیت کردن دیتابیس رو نداشته باشید
مثلا ادرس
http://www.geoplugin.net/php.gp?ip=1111
که به جای ۱۱۱۱ آی پی مورد نظر رو میدید واطلاعات رو میده
و موارد مشابه خیلی زیادی که بگردید توی نت هست

خب منم دقیقا از سایت ip2location رنج ای پی گرفتم
فقط رنجش اینجویه:
2.144.0.0/14
2.176.0.0/12
5.22.0.0/17
5.22.192.0/19
5.23.112.0/21
5.28.32.0/21
5.34.192.0/19
5.52.0.0/16
5.53.32.0/19
5.56.128.0/22
5.56.132.0/24
5.56.135.0/24
خب حالا من میخوام دستوری باشه که اگه ای پی تو این رنج باشه بره تو فلان صفحه else بره تو صفحه دیگه

Rezash
November 24th, 2016, 03:11
برای چک کردن اینکه آی پی تو رنج هست یا نه ی تونید از همچین کدی استفاده کنید :
http://stackoverflow.com/questions/594112/matching-an-ip-to-a-cidr-mask-in-php-5
اگر هم از خود ip2location خردید کد اماده داره برای استفاده

omid1991
November 24th, 2016, 12:36
سلام
من میخوام کاربر که میاد داخل سایتم از رو ای پی کاربر بفهمه از کدوم کشوره ( که تا اینجاشو بلدم ) فقط میخوام بعد مثلا اگه از کشور x بود بره به صفحه xw و اگه از کشورا دیگه بود بره به صفحه y
میخواستم بدونم چجوری میتونم چنین چیزی پیاده سازی کنم؟

سلام وقت بخیر

تست کنید.



function cidr_match($range)
{
list($subnet, $bits) = explode('/', $range);
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask;
return (boolean) (($ip & $mask)==$subnet);
}

$isIrRangeIP=0;
$irRangeIP = file_get_contents('irRangeIP.txt');
$irRangeIP = explode("\n",$irRangeIP);
foreach($irRangeIP as $_irRangeIP)
$isIrRangeIP += cidr_match($_irRangeIP);

if($isIrRangeIP==true)
{
//Iranian users
$page = 'ir';
}
else
$page = 'en';

header("Location: {$page}.php");
exit();

rezah
November 24th, 2016, 15:30
سلام وقت بخیر

تست کنید.



function cidr_match($range)
{
list($subnet, $bits) = explode('/', $range);
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask;
return (boolean) (($ip & $mask)==$subnet);
}

$isIrRangeIP=0;
$irRangeIP = file_get_contents('irRangeIP.txt');
$irRangeIP = explode("\n",$irRangeIP);
foreach($irRangeIP as $_irRangeIP)
$isIrRangeIP += cidr_match($_irRangeIP);

if($isIrRangeIP==true)
{
//Iranian users
$page = 'ir';
}
else
$page = 'en';

header("Location: {$page}.php");
exit();


ممنون ولی مشکل اینجاس که کد رو کلا هر چی تست میکنم چه با ای پی ایران چه با سرور مجازی چه با ***** شکن اخر میره صفحه ir.php
داخل صفحه irRangeIP.txt هم رنج ای پی های ایران رو ریختم

- - - Updated - - -


سلام وقت بخیر

تست کنید.



function cidr_match($range)
{
list($subnet, $bits) = explode('/', $range);
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask;
return (boolean) (($ip & $mask)==$subnet);
}

$isIrRangeIP=0;
$irRangeIP = file_get_contents('irRangeIP.txt');
$irRangeIP = explode("\n",$irRangeIP);
foreach($irRangeIP as $_irRangeIP)
$isIrRangeIP += cidr_match($_irRangeIP);

if($isIrRangeIP==true)
{
//Iranian users
$page = 'ir';
}
else
$page = 'en';

header("Location: {$page}.php");
exit();


من کد را به بالای کد کد زیر را اضافه کردم:

function GetIp()
{
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}

$range=GetIp();

ولی نشد اخر در هر صورت میره ir.php

omid1991
November 24th, 2016, 16:24
ممنون ولی مشکل اینجاس که کد رو کلا هر چی تست میکنم چه با ای پی ایران چه با سرور مجازی چه با ***** شکن اخر میره صفحه ir.php
داخل صفحه irRangeIP.txt هم رنج ای پی های ایران رو ریختم

- - - Updated - - -



من کد را به بالای کد کد زیر را اضافه کردم:

function GetIp()
{
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}

$range=GetIp();

ولی نشد اخر در هر صورت میره ir.php
ببنید ایجا رو
http://pastecode.ir/?p=1052

rezah
November 24th, 2016, 18:18
ببنید ایجا رو
http://pastecode.ir/?p=1052

اقا نمیدونم چجوری باید ازتون تشکر کنم خیلی ممنون واقعا ممنون حل شد.