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
Notice: Undefined index: HTTP_X_FORWARDED_FOR Error in Function
提问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_FOR
header 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_FOR
so 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'] 返回未定义的索引。