کد php تشخیص IP ایران از خارج

برای ایجاد تغییر در ظاهر سایت و تمایز میان آیپی ایران از خارج کشور فقط لازم است از کد زیر استفاده نمایید و آن را در فایل index.php روت اصلی قرار دهید.

کد تشخیص ایپی ایران به زبان php

$remote_add = $_SERVER['REMOTE_ADDR'];
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".$remote_add);
            $country = $xml->geoplugin_countryName ;
            if($country == 'Iran'){ 
            // کد نرمال سایت  خودرا اینجا برای ایران قرار دهید
            }
            else {
           // کد برای خارج نشینان و گوگل و ربات ها را اینجا بگذارید
            }

در این کد از API وبسایت http://www.geoplugin.net استفاده شده است و برای اطلاعات بیشتر می توانید به سایت پرسش و پاسخ stackoverflow بروید.

هشدار: برای این که این کد در آینده نزدیک قطع نشود در سایت https://www.geoplugin.com ثبت نام کنید تا دامنه شما ثبت شود.

در واقع اگر می خواهید محتوا سایت برای ایپی ایران و خارج فرق کند از این شیوه استفاده کنید.

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

من برای مثال در وردپرس این کد را می گذارم تا محتوا فقط به ایرانی ها نشان داده شود و به خارج از کشور نشان داده نشود. این برای سایت ها و صفحات امنیت بیشتری می آورد ولی از گوگل نیز محروم می کند.

<?php

$remote_add = $_SERVER['REMOTE_ADDR'];
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".$remote_add);
            $country = $xml->geoplugin_countryName ;
            if($country == 'Iran'){ 
            // کد نرمال سایت  خودرا اینجا برای ایران قرار دهید

/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );

/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';





            }
            else {
           // کد برای خارج نشینان و گوگل و ربات ها را اینجا بگذارید
echo 'شما با آیپی خارج وارد شدید لطفا با آیپی ایران وارد شوید';
die;
            }

در کد بالا اگر فردی با آیپی ایران به وردپرس وارد شود به راحتی سایت وردپرسی برای او باز می شود اما اگر آیپی خارج داشت پیغام (شما با آیپی خارج وارد شدید لطفا با آیپی ایران وارد شوید) را فقط می بیند.

قبل از قرار دادن کد بالا حتما از index.php در روت پشتیبان گیری انجام دهید سپس کد بالا را در آن جایگزین کنید و نتیجه را در کامنت اطلاع دهید.

کد بهینه تشخیص آیپی ایران و خارج

در صورتی که کد بهینه تر را می خواهید از کد زیر برای وردپرس استفاده کنید تا فقط هر کاربر را یکبار به عنوان ایرانی یا غیر ایرانی شناسایی کند.

فقط در کد زیر برای ایرانی ها فایل index_iran.php اجرا می شود و برای خارجی های فایل index_foreign.php اجرا می شود. شما که از وردپرس استفاده می نمایید باید یکسری کار انجام دهید.

اول از کد های index.php روت اصلی کپی و پشتیبان بگیرید تا آسیب نبیند.

سپس دو فایل کنار در روت با نام های index_iran.php و index_foreign.php در روت ایجاد کنید.

حالا محتوای پشتیبان گرفته شده index.php را عینا در هر دو کپی پیست کنید تا محتوای هر سه فایل یکی شود.

حالا کد زیر را در فایل index.php جایگزین کنید.

تا اینجا هیچ اتفاق خاصی نباید سر سایت آمده باشده. اما برای ایرانی ها index_iran.php و برای خارجی ها index_foreign.php فراخوانی می شود و شما می توانید دو صفحه کاملا متفاوت با کد های متفاوت برای ایران و خارج ایران تعریف کنید.

<?php

$remote_add = $_SERVER['REMOTE_ADDR'];
$cookie_salt = 'Random' ; // به جای Random یک عبارت مخفی بگذارید
$cookie_name = md5(  $cookie_salt . $remote_add );
$cookie_id = hash( $cookie_salt . $remote_add . date('M Y'));
if(isset($_COOKIE[$cookie_name]) && $_COOKIE[$cookie_name] == $cookie_id) {
require "index_iran.php";
die;
}
else{
if(isset($_COOKIE[$cookie_name]) && $_COOKIE[$cookie_name] == '54862') {
require "index_foreign.php";
die;
}
else{
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".$remote_add);
            $country = $xml->geoplugin_countryName ;
            if($country == 'Iran'){ 
			setcookie($cookie_name, $cookie_id, time() + (864000000), "/");
require "index_iran.php";
die;
            }
            else {
			setcookie($cookie_name, '54862', time() + (864000000), "/");
require "index_foreign.php";
die;
			}
            }
}

فقط به جای Random یک عبارت انگلیسی مثل jdkjdlkjcsdlkj بنویسید تا امنیت کار شما بیشتر شود. در کد بالا هر فردی که وارد می شود یکسری چک می شود.

آیا قبلا وارد سایت شده و ایرانی است؟ اگر بله که index_iran.php فراخوانی می شود.
اگر نه آیا قبلا وارد شده و خارجی است ؟ اگر بله index_foreign.php فراخوانی می شود.
اگر قبلا وارد نشده (یا کوکی آن خاموش است) پس آیپی را چک کن که کجایی است.
اگر ایرانی هست که کوکی ایران ست کن و فایل index_iran.php فراخوانی شود.
اگر خارجی است کوکی خارج ست کن و فایل index_foreign.php فراخوانی شود.

توجه کنید که راه های بیشتر و بهینه تری هم وجود دارد مثلا چک کردن ربات از انسان تا ربات ها مانند انسان حتی یک بار هم چک نشوند اما از آن جایی که در اینترنت کامل توضیح داده شده است وارد کد بالا نکردم تا خیلی پیچیده نشود.

راه دیگری هم هست که به جای ست کردن کوکی از آیپی فرد استفاده می شود یا حتی راه دیگری هست که لیست آیپی ایران از وب سایت ها بگیرید و هر هفته به روز کنید تا قبل از ورود کاربر از لیست رنج آیپی ها چک بشه. البته این راه را برای مبتدی ها اصلا توصیه نمی کنم چون مشکلات مخصوص خود را دارد برای مثال آیپی ایران شاید ناگهان تغییر کند ولی لیست شما به روز نشده. پس قویا توصیه می کنم در روش اخر از یک حقه استفاده کنید:

برای کاربران خارجی یک پرسش امنیتی بگذارید تا ربات ها از انسان تشخیص دهد مثلا چیزی که فقط ایرانی ها بلد هستند مثلا: (تهران چند حرف بدون نقطه دارد) این یک پرسش امنیتی مناسب برای آیپی خارج نشینان است و حتی کسی که با vpn هم متصل شود می تواند از محتوای شما بهره مند شود.

اگر در این مورد ها مشاوره خواستید می توانید از قسمت نظرات یا ایمیل مجموعه در ارتباط باشید.

11 دیدگاه در “کد php تشخیص IP ایران از خارج

  • من اینو داخل سایت وردپرسم قرار میدم اما خطا میده و کلا صفحه باز نمیشه
    فقط به آخر کد ?> اضافه کردم و بدون تغییر اضافه کردم خطا مید مشکل چی هست ؟

  • به جای
    // کد نرمال سایت خودرا اینجا برای ایران قرار دهید
    دقیقا باید کدی که میخوای قرار بدیم رو چطور بذاریم من به هر صورت قرار میدم ارور میده خطای ناشناخته

    • کدی که برای ایران می خواهید اجرا بشه و کدی که برای خارج از ایران اجرا بشه را جدا جدا ارسال کنید

  • دمت گرم عالی بود خودم مشکلم رو پیدا کردم برای پاپ اپ میخواستم بذارم که گوگل نمایش نده .
    قسمت ایران میخواستم که باید اینو اضافه میکردم بهش
    echo ‘شما با آیپی خارج وارد شدید لطفا با آیپی ایران وارد شوید’;

    من به جای
    // کد نرمال سایت خودرا اینجا برای ایران قرار دهید
    کد مورد نظر رو قرار میدادم که ارور میداد.

    • راه حل ها زیاد هستن اما همین کد را اگر تغییر دهید بهینه کار می کند.
      این کد الان هر بار که یک صفحه ریکوست می شود آیپی را چک می کند در حالی که نیاز نیست. فقط برای اولین ورود که آمد و چک شد یک کوکی روی مرورگر بازدیدکننده ست کنید تا به عنوان ایرانی شناخته شود و نیاز به چک مدد آیپی نداشته باشد. این طوری در استفاده از api صرفه جویی می کنید پس مصرف cpu پایین می آید.

      راه دومی هم دارد که به جای api از لیست آیپی استفاده نمایید که فقط به حرفه ای ها توصیه می کنم چون لیست باید هر روز اپدیت بشه وگرنه خسارت جبران نشدنی به شما وارد میشه.

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

  • سلام
    نمیشه مثل حالت اول جای اینکه بخواد فایل php یعنی index_foreign.php و index_iran.php رو به کاربر نمایش بده کد مورد نظر که ما میخوایم رو نمایش بده مثلا test و برای کاربر غیر ایرانی No test باشه ؟ در حالت آخر

    • بله ما کد ها را داخل دو فایل جداگانه گذاشتیم تا راحت تر باشید وگرنه می توانید هر کد دلخواهی خواستید قرار بدهید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *