php - tag - এইচটিএমএল এর সকল ট্যাগ




কিভাবে পিএইচপি ক্লায়েন্ট আইপি ঠিকানা পেতে? (16)

আচ্ছা, এটি কেবল $_SERVER নামে GLOBAL ভেরিয়েবল ব্যবহার করে সম্পন্ন করা যেতে পারে।

$_SERVER একটি অ্যারে যা একটি বৈশিষ্ট্য নাম REMOTE_ADDR

শুধু এই $userIp = $_SERVER['REMOTE_ADDR']; মতো এটি বরাদ্দ করুন $userIp = $_SERVER['REMOTE_ADDR'];

অথবা সরাসরি echo $_SERVER['REMOTE_ADDR']; ব্যবহার করে এটি ব্যবহার করুন echo $_SERVER['REMOTE_ADDR']; বা echo ($_SERVER['REMOTE_ADDR']);

আমি কিভাবে পিএইচপি ব্যবহার করে ক্লায়েন্ট আইপি ঠিকানা পেতে পারি?

আমি সেই ব্যবহারকারীর রেকর্ড রাখতে চাই যিনি আমার ওয়েবসাইটে তার আইপি ঠিকানা দিয়ে লগ ইন করেছেন।


আপনি $_SERVER['REMOTE_ADDR']; ব্যবহার করতে পারেন এমন সকলের আগে অন্যরা বলেছিলেন $_SERVER['REMOTE_ADDR']; ক্লায়েন্ট আইপি ঠিকানা পেতে।

এছাড়াও, যদি আপনার ব্যবহারকারী সম্পর্কে আরও তথ্যের প্রয়োজন হয় তবে আপনি এটি ব্যবহার করতে পারেন:

<?php
    $ip='0.0.0.0';
    $ip=$_SERVER['REMOTE_ADDR'];
    $clientDetails = json_decode(file_get_contents("http://ipinfo.io/$ip/json"));
    echo "You're logged in from: <b>" . $clientDetails->country . "</b>";
?>

ক্লায়েন্ট এর আরো নির্দিষ্ট তথ্য $ ক্লায়েন্ট বিস্তারিত মধ্যে যায়।
আপনি $ ক্লায়েন্টে সংরক্ষিত জসন আইটেমগুলি আনতে পারেন ডেটাবেস পরিবর্তনশীল এই ভাবে: $ ক্লায়েন্ট ডেটাবেস-> পোস্টালকোড / হোস্টনাম / অঞ্চল / লোকে ...

আমি অতিরিক্ত তথ্য পেতে ipinfo.io ব্যবহার করছি।

আমি আসা করি এটা সাহায্য করবে.


আমি এই কোড্নিপেট পছন্দ করি:

function getClientIP() {

    if (isset($_SERVER)) {

        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
            return $_SERVER["HTTP_X_FORWARDED_FOR"];

        if (isset($_SERVER["HTTP_CLIENT_IP"]))
            return $_SERVER["HTTP_CLIENT_IP"];

        return $_SERVER["REMOTE_ADDR"];
    }

    if (getenv('HTTP_X_FORWARDED_FOR'))
        return getenv('HTTP_X_FORWARDED_FOR');

    if (getenv('HTTP_CLIENT_IP'))
        return getenv('HTTP_CLIENT_IP');

    return getenv('REMOTE_ADDR');
}

ইন্টারনেটের পেছনে বিভিন্ন ধরনের ব্যবহারকারী রয়েছে, তাই আমরা বিভিন্ন উদ্ভিদ থেকে আইপি ঠিকানাটি ধরতে চাই। যে,

1. $_SERVER['REMOTE_ADDR'] - এতে ক্লায়েন্টের আসল আইপি ঠিকানা রয়েছে। যে ব্যবহারকারীর কাছ থেকে আপনি সবচেয়ে নির্ভরযোগ্য মান খুঁজে পেতে পারেন।

2. $_SERVER['REMOTE_HOST'] - এটি হোস্ট নামটি আনবে যা থেকে ব্যবহারকারী বর্তমান পৃষ্ঠাটি দেখছেন। কিন্তু এই স্ক্রিপ্টটি কাজ করার জন্য, httpd.conf এর ভিতরে হোস্টনাম লুকআপগুলি কনফিগার করা আবশ্যক।

3. $_SERVER['HTTP_CLIENT_IP'] - ব্যবহারকারী শেয়ার করা ইন্টারনেট পরিষেবাদি থেকে আইপি ঠিকানা আনবে।

4. $_SERVER['HTTP_X_FORWARDED_FOR'] - এটি প্রক্সির পিছনে থাকা ব্যবহারকারীর আইপি ঠিকানাটি আনবে

সুতরাং আমরা এই সম্মিলিত ফাংশনটি ব্যবহার করতে পারি যারা ভিন্ন আইপি ঠিকানা পেতে পারে যারা বিভিন্ন অবস্থানে দেখছেন,

// Function to get the user IP address
function getUserIP() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

এই পদ্ধতিটি আমি ব্যবহার করি এবং এটি একটি IPv4 ইনপুট বৈধ করে:

// Get user IP address
if ( isset($_SERVER['HTTP_CLIENT_IP']) && ! empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && ! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
}

$ip = filter_var($ip, FILTER_VALIDATE_IP);
$ip = ($ip === false) ? '0.0.0.0' : $ip;

এই ফাংশন কম্প্যাক্ট এবং আপনি সর্বত্র এটি ব্যবহার করতে পারেন। কিন্তু!

এই ভুলে যাবেন না! এই ধরনের ফাংশন বা কোড ব্লকগুলি ব্যবহারকারী রিয়েল আইপি রেকর্ড করার জন্য গ্যারান্টি দেয় না কারণ কিছু ব্যবহারকারী অদৃশ্য হওয়ার জন্য প্রক্সি বা অন্য নিরাপদ গেটওয়ে ব্যবহার করতে পারেন বা ট্র্যাকিং করতে পারবেন না

Php ফাংশন:

function GetIP()
{
    if ( getenv("HTTP_CLIENT_IP") ) {
        $ip = getenv("HTTP_CLIENT_IP");
    } elseif ( getenv("HTTP_X_FORWARDED_FOR") ) {
        $ip = getenv("HTTP_X_FORWARDED_FOR");
        if ( strstr($ip, ',') ) {
            $tmp = explode(',', $ip);
            $ip = trim($tmp[0]);
        }
    } else {
        $ip = getenv("REMOTE_ADDR");
    }
    return $ip;
}

ব্যবহার:

$IP = GetIP(); অথবা সরাসরি GetIP();


এখানে ক্লায়েন্টের আইপি ঠিকানা প্রাপ্তির এক-লিনিয়ার সংস্করণটি রয়েছে:

$ip = @$_SERVER['HTTP_CLIENT_IP'] ?: @$_SERVER['HTTP_X_FORWARDED_FOR'] ?: @$_SERVER['REMOTE_ADDR'];

নোট:

  • @ ব্যবহার করে, এটি পিএইচপি নোটিশগুলিকে দমন করে।
  • HTTP_X_FORWARDED_FOR থেকে মান কমা দ্বারা পৃথক একাধিক ঠিকানা HTTP_X_FORWARDED_FOR করতে পারে, তাই আপনি যদি প্রথমটি পেতে চান তবে আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন:

    current(explode(',', @$_SERVER['HTTP_X_FORWARDED_FOR']))

এখানে ব্যবহারকারীর আইপি পেতে একটি ভাল উপায় একটি ক্লিনার কোড নমুনা।

$ip = $_SERVER['HTTP_CLIENT_IP']?$_SERVER['HTTP_CLIENT_IP']:($_SERVER['HTTP_X_FORWARDE‌​D_FOR']?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR']);

এখানে একটি ছোট সংস্করণ যা এলভিস অপারেটর ব্যবহার করে

$_SERVER['HTTP_CLIENT_IP']?:($_SERVER['HTTP_X_FORWARDE‌​D_FOR']?:$_SERVER['REMOTE_ADDR']);

এখানে একটি সংস্করণ যা বিজ্ঞপ্তিগুলি সরিয়ে দেওয়ার জন্য ইস্যু ব্যবহার করে (ধন্যবাদ, @ শাশী কাঁথ)

$ip = isset($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];

এটি পাওয়া সবচেয়ে উন্নত পদ্ধতি, ইতিমধ্যে অতীতে অন্য কিছু চেষ্টা করেছি। পরিদর্শকের আইপি ঠিকানাটি নিশ্চিত করার জন্য বৈধ (তবে দয়া করে মনে রাখবেন কোন হ্যাকার সহজেই আইপি ঠিকানাকে মিথ্যা প্রমাণিত করতে পারে)।

function get_ip_address() {
    // check for shared internet/ISP IP
    if (!empty($_SERVER['HTTP_CLIENT_IP']) && validate_ip($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
    }

    // check for IPs passing through proxies
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // check if multiple ips exist in var
        if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false) {
            $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            foreach ($iplist as $ip) {
                if (validate_ip($ip))
                    return $ip;
            }
        } else {
            if (validate_ip($_SERVER['HTTP_X_FORWARDED_FOR']))
                return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED']) && validate_ip($_SERVER['HTTP_X_FORWARDED']))
        return $_SERVER['HTTP_X_FORWARDED'];
    if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && validate_ip($_SERVER['HTTP_FORWARDED_FOR']))
        return $_SERVER['HTTP_FORWARDED_FOR'];
    if (!empty($_SERVER['HTTP_FORWARDED']) && validate_ip($_SERVER['HTTP_FORWARDED']))
        return $_SERVER['HTTP_FORWARDED'];

    // return unreliable ip since all else failed
    return $_SERVER['REMOTE_ADDR'];
}

/**
 * Ensures an ip address is both a valid IP and does not fall within
 * a private network range.
 */
function validate_ip($ip) {
    if (strtolower($ip) === 'unknown')
        return false;

    // generate ipv4 network address
    $ip = ip2long($ip);

    // if the ip is set and not equivalent to 255.255.255.255
    if ($ip !== false && $ip !== -1) {
        // make sure to get unsigned long representation of ip
        // due to discrepancies between 32 and 64 bit OSes and
        // signed numbers (ints default to signed in PHP)
        $ip = sprintf('%u', $ip);
        // do private network range checking
        if ($ip >= 0 && $ip <= 50331647) return false;
        if ($ip >= 167772160 && $ip <= 184549375) return false;
        if ($ip >= 2130706432 && $ip <= 2147483647) return false;
        if ($ip >= 2851995648 && $ip <= 2852061183) return false;
        if ($ip >= 2886729728 && $ip <= 2887778303) return false;
        if ($ip >= 3221225984 && $ip <= 3221226239) return false;
        if ($ip >= 3232235520 && $ip <= 3232301055) return false;
        if ($ip >= 4294967040) return false;
    }
    return true;
}

উৎস: http://blackbe.lt/advanced-method-to-obtain-the-client-ip-in-php/


নিম্নলিখিত ফাংশন সমস্ত সম্ভাবনার নির্ধারণ এবং কমা বিভাজক মধ্যে মান ফেরত (আইপি, আইপি, ইত্যাদি)।

এটি আইপি ঠিকানা যাচাই করার জন্য (ব্যক্তিগত পরিসীমা এবং সংরক্ষিত পরিসীমা) যাচাই করার জন্য ঐচ্ছিক বৈধতা ফাংশন (ডিফল্টরূপে নিষ্ক্রিয় হওয়া প্রথম পরামিতি)।

<?php
echo GetClientIP(true);

function GetClientIP($validate = False){
  $ipkeys = array(
  'REMOTE_ADDR', 
  'HTTP_CLIENT_IP', 
  'HTTP_X_FORWARDED_FOR', 
  'HTTP_X_FORWARDED', 
  'HTTP_FORWARDED_FOR', 
  'HTTP_FORWARDED', 
  'HTTP_X_CLUSTER_CLIENT_IP'
  );

  /*
  now we check each key against $_SERVER if contain such value
  */
  $ip = array();
  foreach($ipkeys as $keyword){
    if( isset($_SERVER[$keyword]) ){
      if($validate){
        if( ValidatePublicIP($_SERVER[$keyword]) ){
          $ip[] = $_SERVER[$keyword];
        }
      }else{
        $ip[] = $_SERVER[$keyword];
      }
    }
  }

  $ip = ( empty($ip) ? 'Unknown' : implode(", ", $ip) );
  return $ip;

}
function ValidatePublicIP($ip){
  if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
    return true;
  }
  else {
    return false;
  }
} 

সে রকমই????

if(($ip=filter_input(INPUT_SERVER,'REMOTE_ADDR',validate_ip))===false or empty($ip)){
  exit;
  }
echo $ip;

দ্রষ্টব্য

if(($ip=filter_input(INPUT_SERVER,'REMOTE_ADDR',FILTER_VALIDATE_IP|FILTER_FLAG_NO_PRIV_RANGE|FILTER_FLAG_NO_RES_RANGE))===false){
  header('HTTP/1.0 400 Bad Request');
  exit;
}

'HTTP_' বা 'X-' দিয়ে শুরু হওয়া সমস্ত শিরোলেখ যথাক্রমে ব্যবহারকারী সংজ্ঞায়িত হতে পারে। আপনি ট্র্যাক ব্যবহার cooies ইত্যাদি রাখতে চান।


$_SERVER['REMOTE_ADDR'] প্রকৃতপক্ষে প্রকৃত ক্লায়েন্ট আইপি ঠিকানাগুলি ধারণ করতে পারে না, এটি আপনাকে প্রক্সির মাধ্যমে সংযুক্ত ক্লায়েন্টগুলির জন্য প্রক্সি ঠিকানা দেবে, উদাহরণস্বরূপ। যদিও আপনি যা চান তা ভালভাবেই হতে পারে, যদিও আইপিগুলির সাথে আপনার কী করা হচ্ছে তার উপর নির্ভর করে। কেউ যদি আপনার ব্যক্তিগত ট্র্যাফিকের RFC1918 ঠিকানাটি কোনও ভাল নাও করতে পারে তবে আপনার ট্র্যাফিক কোথা থেকে উদ্ভূত হয় তা দেখতে চেষ্টা করুন, অথবা ব্যবহারকারীটি কোন আইপি ব্যবহারকারীকে সংযুক্ত করেছেন তা মনে রাখবেন, যেখানে প্রক্সির পাবলিক আইপি বা ন্যাট গেটওয়ে আরও বেশি হতে পারে। সংরক্ষণ উপযুক্ত।

X-Forwarded-For মতো অনেক HTTP হেডার X-Forwarded-For যা বিভিন্ন প্রক্সি দ্বারা সেট করা হতে পারে বা নাও হতে পারে। সমস্যাটি হ'ল এটি হ'ল কেবলমাত্র HTTP হেডার যা কোনও দ্বারা সেট করা যেতে পারে। তাদের কন্টেন্ট সম্পর্কে কোন গ্যারান্টি নেই। $_SERVER['REMOTE_ADDR'] প্রকৃত প্রকৃত আইপি ঠিকানা যা ওয়েব সার্ভার থেকে সংযোগ পেয়েছে এবং প্রতিক্রিয়া পাঠানো হবে। অন্য কিছু শুধু নির্বিচারে এবং স্বেচ্ছাসেবী তথ্য। আপনি এই তথ্যটি বিশ্বাস করতে পারেন এমন এক দৃশ্যকল্প রয়েছে: আপনি এই শিরোনামটি সেট করে প্রক্সি নিয়ন্ত্রণ করছেন। অর্থাত্ যদি আপনি 100% কোথায় এবং কীভাবে শিরোনাম সেট করা হয় তা জানার জন্য এটি গুরুত্বের জন্য আপনার মনোযোগ দেওয়া উচিত।

যে বলেন, এখানে কিছু নমুনা কোড আছে:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

সম্পাদক এর নোট: উপরের কোড ব্যবহার করে নিরাপত্তা প্রভাব আছে । ক্লায়েন্ট সমস্ত HTTP হেডারের তথ্য (অর্থাত্ $_SERVER['HTTP_... ) সেটিকে যেকোন ইচ্ছাকৃত মানের জন্য সেট করতে পারে। যেমন এটি $_SERVER['REMOTE_ADDR'] ব্যবহার করার জন্য আরও বেশি নির্ভরযোগ্য, কারণ এটি ব্যবহারকারী দ্বারা সেট করা যাবে না।

থেকে: http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html


function get_client_ip() 
{
   $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';

   return $ipaddress;
} 

 $_SERVER['REMOTE_ADDR'];

আর একবার চেষ্টা কর


$ip = "";

if (!empty($_SERVER["HTTP_CLIENT_IP"]))
{
 //check for ip from share internet
 $ip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
 // Check for the Proxy User
 $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
 $ip = $_SERVER["REMOTE_ADDR"];
}
echo $ip;





ip-address