PHP擷取使用者的真實IP

來源:互聯網
上載者:User
前幾天面試的時候被問到通過 $_SERVER['SERVER_ADDR']擷取到的IP地址會有什麼問題?那肯定是“如果使用者通過的是代理 擷取不到真正的ip地址”。還好面試官沒有進一步追問。那如何擷取使用者的真實IP地址呢?

分析

現在許多使用者並不是直接撥接,而是通過路由器或其他代理等方式訪問網路。如果我們想要擷取使用者用戶端的真實ip地址,就不能直接使用$_SERVER['SERVER_ADDR'],因為這樣擷取到的ip地址可能是192.168.1.99之類的**區域網路**ip,而不是使用者的公網ip地址。

慶幸的是,當我們的訪問請求通過公網路由或Proxy 伺服器時,該終端將會在HTTP請求中添加X-Forwarded-For頭部資訊,我們可以該要求標頭來擷取用戶端的真實ip地址。

代碼

/** * 擷取使用者的真實ip地址 * @return string */functionget_client_ip(){$headers = array('HTTP_X_REAL_FORWARDED_FOR', 'HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'REMOTE_ADDR');    foreach ($headersas$h){        $ip = $_SERVER[$h];        // 有些ip可能隱匿,即為unknownif ( isset($ip) && strcasecmp($ip, 'unknown') ){            break;        }    }    if( $ip ){        // 可能通過多個代理,其中第一個為真實ip地址list($ip) = explode(', ', $ip, 2);    }    /* 如果是伺服器自身訪問,擷取伺服器的ip地址(該地址可能是區域網路ip)    if ('127.0.0.1' == $ip){        $ip = $_SERVER['SERVER_ADDR'];    }    */return$ip;}?>

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

以上就介紹了PHP擷取使用者的真實IP,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.