![](/img/trans.png)
[英]Undefined index notice HTTP_CLIENT_IP and 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.