2014-11-24 2 views
0

Это функция я использую, чтобы получить IP клиента:PHP - Get Real IPAddress

function get_client_ip_server() { 
$ipaddress = ''; 
if ($_SERVER['HTTP_CLIENT_IP']) 
    $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
else if($_SERVER['HTTP_X_FORWARDED_FOR']) 
    $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
else if($_SERVER['HTTP_X_FORWARDED']) 
    $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
else if($_SERVER['HTTP_FORWARDED_FOR']) 
    $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
else if($_SERVER['HTTP_FORWARDED']) 
    $ipaddress = $_SERVER['HTTP_FORWARDED']; 
else if($_SERVER['REMOTE_ADDR']) 
    $ipaddress = $_SERVER['REMOTE_ADDR']; 
else 
    $ipaddress = 'UNKNOWN'; 

return $ipaddress; 
} 

Единственная проблема заключается в том, что я получаю ошибку в PHP: Примечание: Undefined индекс: HTTP_CLIENT_IP

И в других переменных тоже. Вопрос: Как мне исправить это и ПОЧЕМУ он работает для других?

+0

это зависит от сервера и того, как вы его настроили. чтобы быть в безопасности, класть HTTP_ vars в переменные и делать проверки с! пустым. – unixmiah

ответ

2

Использовать isset на всех чеках.

function get_client_ip_server() { 
$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_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; 
} 
0

попробовать это

$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; 

if (!empty($http_client_ip)) { 
$ip_address = $http_client_ip; 
1

попробовать это

$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; 
0

Или вы можете использовать '@', чтобы остановить предупреждение/ошибка, если она установлена, или нуль, например:

if (@$_SERVER['HTTP_CLIENT_IP'] != '') 
    $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
Смежные вопросы