کد PHP: بدست آوردن آی پی کاربر، وب سایت و سرور

شاید با خودتان فکر کرده‌‌ باشید که چگونه می‌شود آی پی (IP) کاربر را به دست آورد و از آن استفاده کرد و یا آن را در جایی از پروژه‌ی خودتان به عنوان اطلاعاتی از کاربران‌تان ذخیره کنید. ما در این مقاله، دو مورد از رایج‌ترین روش‌‌ها برای بدست آوردن آی پی کاربر را به شما آموزش خواهیم داد، با ما همراه باشید.

برای چه IP کاربر را داشته باشیم؟

آدرس آی پی، شماره شناسایی منحصر به فرد هر کامپیوتر متصل به شبکه اینترنت است، شما می‌توانید با آی پی کاربر سایت خود، کارهای زیادی انجام دهید از جمله:

  •     متوجه شوید که بازدیدکنندگان و کاربران وب سایت شما بیشتر از چه کشورهایی هستند.
  •     در صورت لزوم، IP کاربران یا کشورهای خاصی را ببندید تا نتوانند به وب سایت شما وارد شوند.
  •     آخرین باری که ادمین وارد سایت شده است، چه آی پی داشته است.
  •     و بسیار کاربردهای دیگر …

گاهی اوقات سوالاتی وجود دارد که گفته می‌شود بدست آوردن آی پی گوشی امکان پذیر است یا خیر؟ که باید گفت بله امکان پذیر است و با همین کدهای نوشته شده در ادامه‌ی مقاله می‌توانید آی پی کاربر را به دست آورید.

به دست آورد آوردن آی پی با PHP

برای بدست آوردن آی پی سرور، کامپیوتر یا گوشی از طریق PHP می‌توانید از تابع زیر استفاده کنید:

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

ولی ممکن است کاربر شما از پروکسی استفاده کند و IP خودش را تغییر بدهد. برای این که از این کار جلوگیری کنیم و آی پی واقعی کاربر را بدست بیاوریم، بهتر است از تابع زیر استفاده کنید:

function GetRealIp()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))
        //check ip from share internet
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
        //to check ip is pass from proxy
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else
        $ip = $_SERVER['REMOTE_ADDR'];
    return $ip;
}
echo(GetRealIp());

این تابع‌ها در localhost یا بر روی سیستم شما به درستی کار نمی‌کنند. بنابراین بهتر است آن را برای تست در هاست خود آپلود کنید و از آنجا تست بگیرید.

برای بدست آوردن آی پی سایت می‌توانید از تابع زیر استفاده کنید:

function GetIpHost($ip)
{
    $ip = gethostbyname($ip);
    return $ip;
}
echo(GetIpHost("www.7learn.com"));

اگر پارامتر ورودی تابع، سایتی باشد که وجود خارجی نداشته باشد، خروجی تابع‌ها عبارت “سایت نامعتبر” می‌باشد.

به دست آوردن آدرسIP توسط پکیج‌های موجود

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

شاید از خودتان بپرسید که چرا از همان اول به شما پکیج‌های کاربردی را معرفی نکردیم؟ خیلی خوب است که شما درک مناسبی داشته باشید که این پکیج‌ها چگونه کار می‌کنند تا بتوانید به راحتی از آن‌ها استفاده کنید و سوالاتی که ممکن است در ذهن‌تان پیش بیاید را جواب داده باشید.

پکیچ user-ip

برای نصب این پکیج حتما باید composer را داشته باشید. برای نصب این پکیج از طریق composer دستور زیر را وارد کنید.

composer require yogeshkoli/user-ip

بعد از نصب شدن این پکیج با include کردن autoload کامپوزر (compsoer)  به پکیج دسترسی خواهید داشت.

 <?php
require __DIR__ . '/../vendor/autoload.php';
use YogeshKoli\UserIP\UserIP;
var_dump(UserIP::get());

با کد بالا شما می‌توانید آی پی کاربر را دریافت کنید.

اگر می‌خواهید آی پی دریافتی را اعتبار سنجی کنید می‌توانید از کد زیر استفاده کنید:

<?php
require __DIR__ . '/../vendor/autoload.php';
use YogeshKoli\UserIP\UserIP;
$ip = '192.168.10.1';
var_dump(UserIP::validate($ip));
/example/ValidateIPTest.php:9:boolean true

جمع‌بندی:

در این مقاله ابتدا خودمان کدهای دریافت آی پی کاربر را به صورت PHP Pure یا PHP خام نوشته‌ایم و بعد از آن که درک مناسبی از آن پیدا کردیم، به سراغ یک پکیج مناسب برای به دست آوردن IP کاربر رفتیم و آن را نصب و سپس در برنامه خود استفاده کردیم. سعی کنید زمانی که از یک پکیج استفاده می‌کنید، حتما از کدهای نوشته شده درون آن پکیج درک مناسبی داشته باشید تا صرفا یک مصرف کننده  محض نباشید. خوشحال می‌شویم که نظرات، پیشنهادها و تجربه‌های خود را با ما در میان بگذارید.

اگر به یادگیری بیشتر در زمینه‌ی PHP علاقه داری، با شرکت در دوره‌ی آموزشی متخصص PHP در کمتر از یک سال به یک متخصص PHP تبدیل می‌شوی که آماده‌ی استخدام، دریافت پروژه، کسب درآمد و یادگیری مباحثی مثل لاراول هستی.

 
ارسال دیدگاه
ما همه سوالات و دیدگاه ها رو می خونیم و پاسخ میدیم
۳۱ دیدگاه
علیرضا ۰۶ اردیبهشت ۱۴۰۰، ۱۶:۳۱
سلام علیکم
چجوری میشه سیستمی طراحی کرد که مثلا وقتی کاربر یک بار وارد می شود لازم نباشد بعد از بستن سایت مجددا وارد شود ؟
(مثلا یک پیام رسان)
با این روش میشه ؟
نازنین کریمی مقدم ۰۷ اردیبهشت ۱۴۰۰، ۰۳:۴۴
سلام.
معمولا برای این کار شما باید یک توکن برای هر کاربر بسازید و در دیتابیس ذخیره کنید تا هردفعه نیاز نباشه لاگین کنه، برای همین با این روشها نمیشه.
پیشنهاد میکنم آموزش های ساخت فرم لاگین رو از منوی جستجوی سایت ببینید و مطالعه کنید.
علی رضا ۱۳ بهمن ۱۳۹۹، ۱۱:۳۸
میگ من میخوام ای پی کسانی که میان پی وی از اینستا واتساپ و... بدست بیارم تو تو متالقب نگفتی این کدا رو کجا باید بزاریم
محمود رنجبر ۲۵ دی ۱۳۹۹، ۱۰:۲۱
سلام من از تابع شما استفاده کردم ولی با استفاده کردن از فیلتر شکن ip تغییر میکنه و نمیتونه ip واقعی رو نشون بده برای سیستم امتیاز دهی می خوام لطفا راهنمایی کنید
نازنین کریمی مقدم ۲۷ دی ۱۳۹۹، ۱۴:۰۶
درود. بله متاسفانه این روش برای فیلترشکن جواب نمیده.
مقاله ای برای حل این مشکل در تقویم کاری مون هست که به زودی منتشر میکنیم.
علی رضا ۲۴ دی ۱۳۹۹، ۱۶:۵۴
سلام ببخشید بعزی از سایت ها هستند که مثلا کاربرا باید روی یه لینک کلیک بکنند و هر کلیک آنها یه پولی برای صاحب سایت داشته باشد خب بعزی ها تقلب می کنند و دو یا چند بار روی لینک می زنند آیا با استفاده از ثبت ip و تشخیص تکراری نبودن آنها میشه جلوی تقلب رو گرفت ؟؟یعنی برای تکراری نبودن ip روش خوبی است؟؟
رضا زیدی ۲۷ دی ۱۳۹۹، ۱۵:۴۰
سلام
خیر، روش کاملی نیست چون اولا برای کاربران متعلق به یه شبکه، آدرس های ip مشابه هست و ثانیا کاربر زمانی که از vpn استفاده کنه، آدرس ip تغییر می‌کنه.
سیامک ۱۴ دی ۱۳۹۹، ۱۳:۰۸
سلام
دستور REMOTE_ADDR آی پی کاربر در شبکه محلی رو میده و این ممکنه برای کاربران مختلف مشابه باشه
چطوری باید آی پی شبکه اینترنتی کاربر رو دریافت کنیم؟
نازنین کریمی مقدم ۱۶ دی ۱۳۹۹، ۱۱:۰۲
درود خداوند بر شما، سوال خوبی پرسیدید که نیاز داره یا مقاله آپدیت بشه یا در مقاله جدیدی پوشش بدیم.
در صورت انتشار لینکشو براتون در جواب همین کامنت قرار میدم.
نوید ۳۰ شهریور ۱۳۹۹، ۰۱:۱۱
با سلام
خیلی ممنون از اینکه این زمینه را ایجاد می کنید که کاربران واقعا یک استفاده کننده محض نباشند

یک سوال
زمانی که در سرور $ip = $_SERVER['REMOTE_ADDR']; را اجرا می کنم آدرس خود سرور را میدهد و فکر کنم این به این معنی است که درخواست برای سایت من از روی خود سرور ارسال می شود
چطور این امر مممکن است؟
امیر صالحی ۳۰ شهریور ۱۳۹۹، ۱۶:۲۹
سلام و احترام
خوشحالیم که برای شما مفید بوده.
این کد رو روی localhost اجرا میکنید؟؟
ميثم كرامتي ۲۷ اردیبهشت ۱۳۹۴، ۱۶:۱۵
ممنون ميشم لينك دانلود كه پيشنمايششو گذاشتينو قرار بدين....ممكنه تو نوشتن كد اشتباه كنيم ....ممنون.......
meysam ۲۷ اردیبهشت ۱۳۹۴، ۱۵:۵۵
دوست عزيز ممنون ميشم لينك دانلودشو بزارين چون ممكنه ما نتونيم درست كدو بنويسيم.....
همون پيش نمايشي كه گذاشتينو لينك دانلودشم بزارين عالي ميشه...ممنون ميشم.....
يكي هم چطور ميشه كسايي كه از پرو=سي يا ... استفاده ميكنند رو ورودشونو به سايت با كد محدود كنيم يا اگه كسي استفاده ميكنه به يه صفحه ديگه بره.....ممنون ميشم كمك كنيد....
hengameh ۱۹ اردیبهشت ۱۳۹۴، ۱۴:۵۴
من 2 تا سایت ورد پرس دارم که یکی رو فارسی و یکی رو انگلیسی پیاده سازی کردم .میخوام هر کاربری اولین بار وارد یکی از سایتها شد تشخیص دهد که اگر از ایران بود ، وارد سایت فارسی شود در غیر این صورت وارد انگلیسی شود.در ضمن دامین هر دو سایت با هم متفاوت است.
کسی میتونه کمک کنه؟
ram ۳۱ فروردین ۱۳۹۴، ۲۳:۴۴
تابع realip درست کار نمیکنه ...تست کردم با ف* شکن و بدون اون... 2 تا نتیجه جداگانه داد.
لقمان آوند ۰۱ اردیبهشت ۱۳۹۴، ۰۰:۲۶
خوب درسته دیگه .
با ف*شکن درخواست شما از سرور دیگه ای به سایت ارسال میشه که آیپی اونجا رو میده .
علی ۲۵ دی ۱۳۹۳، ۱۰:۴۰
نمی شه شما در هیمن جا ،نمونه و مثال بیاورید
لقمان آوند ۲۵ دی ۱۳۹۳، ۱۲:۲۵
این کدها رو بزار تو یه فایل به نام myFuncs.php بعد با دستور زیر تو فایل دیگه اونو اینکلود کن :
[cc] include 'myFuncs.php';[/cc]
بعد اینطوری هم صداش بزن :
[cc] echo(GetIpHost("www.7learn.com"));[/cc]
طبیعتا برای کارای دیگه باید کمی با php آشنا باشید ...
ramin ۲۲ دی ۱۳۹۳، ۰۹:۱۵
سلام. ببخشید یه سوال
وقتی از این تابع استفاده میکنم ، فقط قسمت اول ای پی رو ذخیره میکنه ؟ میدونید علتش چیه ؟

مثلا : 192.168.10.10 رو فقط این ذخیره میکنه : 192168
سیروان شیخی ۰۴ تیر ۱۳۹۳، ۲۱:۱۱
با سلام این یک تابع است و باید در جای خودش قرار بدی. لطفا دقیق بگید که که کجا باید قرار بدیم.
اموزشی که میزارید باید شما مبتدی ها رو در نظر بگیری.
لطفا از طریق میل منو از جوابتون باخبر کنید.
بدرود
سجاد دریس ۰۴ تیر ۱۳۹۳، ۲۳:۵۹
میتونید توی یک فایل جدا این تابع رو قرار بدین، بعد فایل رو include کنید و تابع رو صدا بزنید.
محمد حسین ۰۲ اردیبهشت ۱۳۹۳، ۲۳:۰۸
عالی بود خدا قوت
aaaaaa ۲۰ بهمن ۱۳۹۲، ۱۱:۳۱
سلام ممنون . منم میخواستم بدونم تابع رو باید کجا بذاریم . و برای دیدن ای پی کاربر ها و یا سایتی چی کاری انجام بدیم
وحید صالحی ۲۴ بهمن ۱۳۹۲، ۱۰:۴۴
هر جای قالب که تمایل دارید نشون داده بشه دیگه...
reza8022 ۱۹ دی ۱۳۹۲، ۱۵:۳۲
سلام،ممنون از مطالب خوبتون لطفا اگه میشه توضیح بدید که این کد رو تو کدوم قسمت قالب سایت قرار بدیم.تا ما تازه کارها هم کمی دستمون راه بیفته. :?:
میثم دات تی ۲۰ دی ۱۳۹۲، ۰۸:۰۹
گرفتن آی پی کاربر استفاده های مختلفی داره مثل آمار بازدید و یا عدم دسترسی افراد با آی پی خاص به قسمتی از سایت و یا مثلا توی سیستم لایک و .. بسته به نیازتون میتونید استفاده کنید.
رضا ساطع بیدگلی ۱۸ دی ۱۳۹۲، ۱۴:۰۱
سلام
تبریک میگم نویسندگیتون رو .
امیدوارم که موفق باشید .
علی امینی ۱۸ دی ۱۳۹۲، ۱۲:۴۴
سلام
ممنون بابت کد.من قبلا تو لوکال این تابع هارو امتحان کردم ولی کار نکردن،بعدش تازه فهمیدم که تو لوکال کار نمیکنه :lol:
N a S e R ۱۸ دی ۱۳۹۲، ۱۳:۵۰
خواهش میشه بله نوشتم در لوکال تابع ها به درستی کار نمیکنن :?: