在PHP中获取IP地址的更好方法是什么:

getenv('REMOTE_ADDR'); 

,或者

在PHP中获取IP地址的更好方法是什么:

getenv('REMOTE_ADDR'); 

,或者

<*>

请告诉我两者之间的区别,如果有的话。

SERVER['REMOTE_ADDR'];

请告诉我两者之间的区别,如果有的话。

有帮助吗?

解决方案

getenv()可用于访问任何环境变量(PHP只是将REMOTE_ADDR注册为脚本的环境变量),而使用$ _SERVER,您显然只能访问$ _SERVER超全局的内容。

常见的方法是使用$ _SERVER,尽管它在功能方面并没有什么不同。

其他提示

$ _ SERVER是一个内置的PHP变量,而getenv()向环境(可能是Apache / IIS)询问值。

获取IP的最佳方式是;

$ip = (!empty(

$ _ SERVER是一个内置的PHP变量,而getenv()向环境(可能是Apache / IIS)询问值。

获取IP的最佳方式是;

<*>

但我怀疑这两个变量之间有什么区别......嗯。

SERVER['REMOTE_ADDR'])) ?

$ _ SERVER是一个内置的PHP变量,而getenv()向环境(可能是Apache / IIS)询问值。

获取IP的最佳方式是;

<*>

但我怀疑这两个变量之间有什么区别......嗯。

SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');

但我怀疑这两个变量之间有什么区别......嗯。

使用它可能会更好   $ _SERVER [ 'REMOTE_ADDR']; 防止服务器之间的不兼容。

这些电话之间没有区别。如您所见, PHP手册在同一示例中使用了这两种方法。在某些情况下,您没有启用$ _SERVER等全局变量,并且您被迫使用getenv()。根据我的经验,我从未见过禁用全局变量的服务器。

使用 $ _ SERVER ['REMOTE_ADDR'] ,您可以通过访问远程请求发生时设置的$ _SERVER []数组来直接读取全局变量:

$ _SERVER 是一个包含此类信息的数组作为标题,路径和脚本位置。此阵列中的条目由Web服务器创建。无法保证每个Web服务器都能提供这些服务;服务器可以省略一些,或提供此处未列出的其他服务器。也就是说,大量的这些变量都在&#187; CGI 1.1规范,所以你应该能够期待那些。

getenv()函数访问任何环境变量以获取相关值!

在这两种情况下,您都可以访问相同的值和相同的变量...但$ _SERVER是PHP超全局变量的构建,而getenv()获取当前环境中定义的变量的值!

我认为在这种情况下,使用超全局变量是获取IP地址的最佳方式!

这篇文章有点陈旧,所以我想我会分享我目前在PHP脚本中获取请求IP地址的方式,因为这篇文章最初是关于 更好 获取请求IP的方式。这是一种更好的方式,虽然不是原始帖子中给出的选择之一。

此方法使用小型函数库以便于移植。

// Function to sanitize IP string
function sanitize_ip($string){
  $string = trim($string); 
  $string = strip_tags($string);
  $string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
  $string = str_replace('\n', '', $string);
  $string = trim($string); 
  return $string;
}

// Function to evaluate HTTP headers for IP
function evaluate_ip(){
  $ip_keys =
    array(
      'HTTP_CF_CONNECTING_IP',  'HTTP_CLIENT_IP',            'HTTP_X_FORWARDED_FOR',
      'HTTP_X_FORWARDED',       'HTTP_X_CLUSTER_CLIENT_IP',  'HTTP_X_REAL_IP',
      'HTTP_X_COMING_FROM',     'HTTP_PROXY_CONNECTION',     'HTTP_FORWARDED_FOR',
      'HTTP_FORWARDED',         'HTTP_COMING_FROM',          'HTTP_VIA',
      'REMOTE_ADDR'
    );
  foreach ($ip_keys as $key){
    if (array_key_exists($key, 

这篇文章有点陈旧,所以我想我会分享我目前在PHP脚本中获取请求IP地址的方式,因为这篇文章最初是关于 更好 获取请求IP的方式。这是一种更好的方式,虽然不是原始帖子中给出的选择之一。

此方法使用小型函数库以便于移植。

<*>

希望这会在2018年帮助某人!

SERVER) === true){ foreach (explode(',',

这篇文章有点陈旧,所以我想我会分享我目前在PHP脚本中获取请求IP地址的方式,因为这篇文章最初是关于 更好 获取请求IP的方式。这是一种更好的方式,虽然不是原始帖子中给出的选择之一。

此方法使用小型函数库以便于移植。

<*>

希望这会在2018年帮助某人!

SERVER[$key]) as $ip){ $ip = trim($ip); $ip = normalize_ip($ip); if (validate_ip($ip)) return $ip; } } } // Build error response HTML $msg = '<div style="width:100%; font-family:serif; font-size:24px; line-height:28px; color:#cc0000; font-weight:bold; text-align:center; padding:10px;"> ERROR:&nbsp;<span style="color:#ffc107">Invalid IP Address</span> </div>'; echo $msg; exit; } // Function to normalize IPv4 and IPv6 addresses with port function normalize_ip($ip){ // IPv4 with port (e.g., 123.123.123.123:80) if (strpos($ip, ':') !== false && substr_count($ip, '.') == 3 && strpos($ip, '[') === false){ $ip = explode(':', $ip); $ip = $ip[0]; } // IPv6 with port (e.g., [::1]:80) else { $ip = explode(']', $ip); $ip = ltrim($ip[0], '['); } return $ip; } // Function to validate IP address function validate_ip($ip){ $options = FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE; $filtered = filter_var($ip, FILTER_VALIDATE_IP, $options); if (!$filtered || empty($filtered)){ if (preg_match("/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/", $ip)){ return $ip; // IPv4 } elseif (preg_match("/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/", $ip)){ return $ip; // IPv6 } // Build error response HTML $msg = '<div style="width:100%; font-family:serif; font-size:24px; line-height:28px; color:#cc0000; font-weight:bold; text-align:center; padding:10px;"> ERROR:&nbsp;<span style="color:#ffc107">Invalid IP Address</span> </div>'; echo $msg; exit; } return $filtered; } function get_ip(){ $ip = evaluate_ip(); if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/', $ip, $ip_match)){ $ip = $ip_match[1]; } return sanitize_ip($ip); } // To Use $ip = get_ip(); //

希望这会在2018年帮助某人!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top