php 注意:未定义索引:HTTP_X_FORWARDED_FOR 函数错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9548934/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 07:05:31  来源:igfitidea点击:

Notice: Undefined index: HTTP_X_FORWARDED_FOR Error in Function

php

提问by Satch3000

I'm getting Notice: Undefined index: HTTP_X_FORWARDED_FOR in the Function below:

我收到通知:未定义索引:HTTP_X_FORWARDED_FOR 在下面的函数中:

function _ip( )
{
    return ( preg_match( "/^([d]{1,3}).([d]{1,3}).([d]{1,3}).([d]{1,3})$/", $_SERVER['HTTP_X_FORWARDED_FOR'] ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'] );
}

回答by Xeoncross

You should be using the getenv() method instead of $_SERVER.

您应该使用 getenv() 方法而不是 $_SERVER。

function _ip( )
{
    if (preg_match( "/^([d]{1,3}).([d]{1,3}).([d]{1,3}).([d]{1,3})$/", getenv('HTTP_X_FORWARDED_FOR'))
    {
        return getenv('HTTP_X_FORWARDED_FOR');
    }
    return getenv('REMOTE_ADDR');
}

Also, I would stick with just $ip = getenv('REMOTE_ADDR')as spammers can set the HTTP_X_FORWARDED_FORheader themselves to anything they want while they can't change the remote_addr. The problem is that "good" proxies tell the truth about HTTP_X_FORWARDED_FORso you would miss that.

此外,我会坚持,就像$ip = getenv('REMOTE_ADDR')垃圾邮件发送者可以将HTTP_X_FORWARDED_FOR标头自己设置为他们想要的任何内容而他们无法更改 remote_addr 一样。问题是“好的”代理会说实话,HTTP_X_FORWARDED_FOR所以你会错过。

回答by nachito

$_SERVER['HTTP_X_FORWARDED_FOR'] doesn't exist in your array. You can confirm with print_r($_SERVER). You'll need to test for the existence of that array index before using it.

$_SERVER['HTTP_X_FORWARDED_FOR'] 在您的数组中不存在。您可以用 确认print_r($_SERVER)。在使用它之前,您需要测试该数组索引是否存在。

function _ip( )
{
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        return ( preg_match( "/^([d]{1,3}).([d]{1,3}).([d]{1,3}).([d]{1,3})$/", $_SERVER['HTTP_X_FORWARDED_FOR'] ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'] );
    } else {
        return null; //something else
    }
}

回答by David Harkness

There is no `` header present. You need to check to see if it's present before accessing it.

没有 `` 标头存在。在访问它之前,您需要检查它是否存在。

function _ip( )
{
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) {
        if (preg_match( "/^([d]{1,3}).([d]{1,3}).([d]{1,3}).([d]{1,3})$/", $_SERVER['HTTP_X_FORWARDED_FOR'])
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
    }
    return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
}

回答by Phil

Obviously it's because that index does not exist in the $_SERVER array. You could avoid the notice by doing

显然这是因为 $_SERVER 数组中不存在该索引。您可以通过执行以下操作来避免通知

if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) { 
  // your code here
} else {
  if( isset( $_SERVER['REMOTE_ADDR'] ) ) 
     return $_SERVER['REMOTE_ADDR'];
  else  
    return FALSE;
}

I'm guessing you're trying to retrieve the remote address, the code above might be a bit more robust.

我猜您正在尝试检索远程地址,上面的代码可能更健壮一些。

回答by Rmy5

getenv('HTTP_X_FORWARDED_FOR') returns false if the variable is not present in the $_SERVER array whereas $_SERVER['HTTP_X_FORWARDED_FOR'] returns undefined index if the variable is not set.

如果 $_SERVER 数组中不存在变量,则 getenv('HTTP_X_FORWARDED_FOR') 返回 false,而如果未设置变量,则 $_SERVER['HTTP_X_FORWARDED_FOR'] 返回未定义的索引。