سلام
من میخوام کاربر که میاد داخل سایتم از رو ای پی کاربر بفهمه از کدوم کشوره ( که تا اینجاشو بلدم ) فقط میخوام بعد مثلا اگه از کشور x بود بره به صفحه xw و اگه از کشورا دیگه بود بره به صفحه y
میخواستم بدونم چجوری میتونم چنین چیزی پیاده سازی کنم؟
سلام
من میخوام کاربر که میاد داخل سایتم از رو ای پی کاربر بفهمه از کدوم کشوره ( که تا اینجاشو بلدم ) فقط میخوام بعد مثلا اگه از کشور x بود بره به صفحه xw و اگه از کشورا دیگه بود بره به صفحه y
میخواستم بدونم چجوری میتونم چنین چیزی پیاده سازی کنم؟
مقداری از کدتون رو بزارید تا بشه راهنمایی کرد
اگر با شناسایی کشور مشکلی ندارید و مثلا کشور رو در متغیر country دارید میتونید اینجوری عمل کنید :
کد PHP:
<?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 هست که مسدود سازی ای پی ایران باشه ولی نیاز من این نیست میخوام ای پی اینا بود اون اتفاق بیوفته
آپدیت نگه داشتن رنج آی پی ها اصلا کار ساده ای نیست
میتونید از سرویس های پولی سایت هایی مثل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 بره تو صفحه دیگه
برای چک کردن اینکه آی پی تو رنج هست یا نه ی تونید از همچین کدی استفاده کنید :
http://stackoverflow.com/questions/5...-mask-in-php-5
اگر هم از خود ip2location خردید کد اماده داره برای استفاده
سلام وقت بخیر
تست کنید.
کد PHP:
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();
ویرایش توسط omid1991 : November 24th, 2016 در ساعت 13:10
ممنون ولی مشکل اینجاس که کد رو کلا هر چی تست میکنم چه با ای پی ایران چه با سرور مجازی چه با ***** شکن اخر میره صفحه ir.php
داخل صفحه irRangeIP.txt هم رنج ای پی های ایران رو ریختم
- - - Updated - - -
من کد را به بالای کد کد زیر را اضافه کردم:
ولی نشد اخر در هر صورت میره ir.phpکد PHP:
function GetIp()
{
$ip = $_SERVER['REMOTE_ADDR'];
return $ip;
}
$range=GetIp();
ببنید ایجا رو
http://pastecode.ir/?p=1052
در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)