簡體   English   中英

注意:未定義索引:HTTP_X_FORWARDED_FOR函數錯誤

[英]Notice: Undefined index: HTTP_X_FORWARDED_FOR Error in Function

我收到通知:未定義的索引: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'] );
}

您應該使用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');
}

另外,我會堅持使用$ip = getenv('REMOTE_ADDR')因為垃圾郵件發送者可以將HTTP_X_FORWARDED_FOR標頭設置為他們想要的任何東西,而他們無法更改remote_addr。 問題是“好”的代理人講述了HTTP_X_FORWARDED_FOR的真相,所以你會錯過這個。

$ _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
    }
}

沒有“標題存在。 在訪問之前,您需要檢查它是否存在。

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'] : '';
}

如果$ _SERVER數組中不存在該變量,則getenv('HTTP_X_FORWARDED_FOR')返回false;如果未設置該變量,則$ _SERVER ['HTTP_X_FORWARDED_FOR']返回未定義的索引。

顯然這是因為$ _SERVER數組中不存在該索引。 你可以通過這樣做來避免通知

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

我猜你正在嘗試檢索遠程地址,上面的代碼可能會更強大一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM