- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
# Определение IP адреса
static public function ip() {
# Список возможных заголовков для получения ip адреса
$Sip = array();
$Sip['REMOTE_ADDR'] = getenv('REMOTE_ADDR');
$Sip['HTTP_FORWARDED_FOR'] = getenv('HTTP_FORWARDED_FOR');
$Sip['HTTP_X_FORWARDED_FOR'] = getenv('HTTP_X_FORWARDED_FOR');
$Sip['HTTP_X_COMING_FROM'] = getenv('HTTP_X_COMING_FROM');
$Sip['HTTP_VIA'] = getenv('HTTP_VIA');
$Sip['HTTP_XROXY_CONNECTION'] = getenv('HTTP_XROXY_CONNECTION');
$Sip['HTTP_CLIENT_IP'] = getenv('HTTP_CLIENT_IP');
$Sip['Unknow'] = '0.0.0.0';
# Выбор найденного ip адреса
if(isset($Sip['REMOTE_ADDR'])) {
$Rip = $Sip['REMOTE_ADDR'];
} else if(isset($Sip['HTTP_FORWARDED_FOR'])) {
$Rip = $Sip['HTTP_FORWARDED_FOR'];
} else if(isset($Sip['HTTP_X_FORWARDED_FOR'])) {
$Rip = $Sip['HTTP_X_FORWARDED_FOR'];
} else if(isset($Sip['HTTP_X_COMING_FROM'])) {
$Rip = $Sip['HTTP_X_COMING_FROM'];
} else if(isset($Sip['HTTP_VIA'])) {
$Rip = $Sip['HTTP_VIA'];
} else if(isset($Sip['HTTP_XROXY_CONNECTION'])) {
$Rip = $Sip['HTTP_XROXY_CONNECTION'];
} else if(isset($Sip['HTTP_CLIENT_IP'])) {
$Rip = $Sip['HTTP_CLIENT_IP'];
} else {
$Rip = '0.0.0.0';
}
# Валидация ip адреса
# Получение из секций массив
$ARip = explode( '.', $Rip );
# Пересборка ip адреса
$RARip = array(0 => NULL, 1 => NULL, 2 => NULL, 3 => NULL);
for($n = 0; $n < 10; $n++) {
$RARip[0] .= isset( $ARip[0]{$n} ) ? $ARip[0]{$n} : NULL;
$RARip[1] .= isset( $ARip[1]{$n} ) ? $ARip[1]{$n} : NULL;
$RARip[2] .= isset( $ARip[2]{$n} ) ? $ARip[2]{$n} : NULL;
$RARip[3] .= isset( $ARip[3]{$n} ) ? $ARip[3]{$n} : NULL;
}
$BRip = substr( (int) $RARip[0], 0, 3 ) . '.' . substr( (int) $RARip[1], 0, 3 ) . '.' . substr( (int) $RARip[2], 0, 3 ) . '.' . substr( (int) $RARip[3], 0, 3 );
# Возвращение пересобранного ip адреса
return $BRip;
}
Не столько — «Г», сколько — «Извращение»...
Улыбнуло имя переменной — $Rip;
А раньше этот код был суровее — exit( $string ); в случаи не соответствия...
Lure Of Chaos 23.05.2012 08:26 # +4
порадовало
да, а как же $BDRip, $CamRip, $DVDRip?
roman-kashitsyn 23.05.2012 10:45 # +2
Freeman 24.05.2012 04:15 # +1
а если про RARip то да солидарен, ZIPip, GZip, BZip и т.п.)
Lure Of Chaos 24.05.2012 08:53 # +1
nethak 24.05.2012 10:57 # +2
JavaGovno 23.05.2012 09:06 # +2
7ion 23.05.2012 13:58 # 0
eth0 23.05.2012 16:15 # +2
Интересно, кстати, как этот код будет работать, если у клиента и сервера будут IPv6-адреса.
nethak 23.05.2012 18:46 # +1
В Google chrome, причём именно и исключительно в нём, хоть казалось и нету связи с «кроссплатформенностью», не знаю с чем это связанно, и не пытался выяснить.
Но сей факт, остаётся фактом.
eth0 23.05.2012 20:15 # +2
На деле, прорекаю чью-то косорукость в настройке сервера, или какой-то хитрый баг в минорной версии PHP. Что, опять, не играет никакой роли.
nethak 23.05.2012 20:55 # 0
Ради интереса провёл эксперимент:
error_reporting( E_ALL );
exit( (string) getenv('REMOTE_ADDR') );
Во всех браузерах мне вернуло — 127.0.0.1
В Google chrome — ::1
Вот Вам и феномен...
Адрес проекта XAMPP: http://www.apachefriends.org/
К сожалению версию не помню...
Как Вы это прокомментируете?
nethak 23.05.2012 20:59 # 0
phpinfo() — аналогично.
PHP Version 5.3.8
Вот мне даже интересно стало, каким образом, клиент сыграл такую разницу...
nethak 23.05.2012 21:01 # +1
Версия G.H. 19.0.1084.46 m
7ion 24.05.2012 02:48 # +3
Еще один аргумент в пользу браузеров, а не сторонних программ.
Freeman 24.05.2012 04:18 # +1
nethak 24.05.2012 04:30 # 0
bormand 24.05.2012 06:08 # +2
Отключите IPv6 на своей машине, и хром тоже определится как 127.0.0.1. Он походу просто предпочитает IPv6.
rat4 24.05.2012 09:32 # +4
И правильно делает!
nethak 24.05.2012 10:59 # −4
eth0 26.05.2012 19:22 # 0
..и мы снова возвращаемся к вопросу, как унылокод ОП будет вести себя на (недайбх) IPv6.
lucidfoxGovno 23.05.2012 21:59 # −2