Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2011, 20:17   #1
SkrudjMakdak
Форумчанин
 
Регистрация: 14.04.2010
Сообщений: 145
По умолчанию не высвечивает ip

есть статистика, которая записывает в бд ip адреса посетителей. Пользуюсь вот этой строчкой:
$_SERVER["REMOTE_ADDR"]
но бывает такое что в бд записываются пустые значения, почему?
SkrudjMakdak вне форума Ответить с цитированием
Старый 14.06.2011, 21:02   #2
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

пустые значения $_SERVER['REMOTE_ADDR'] содержит когда пользователь пользуется проксей.
есть еще такие вещи как $_SERVER['HTTP_CLIENT_IP'] и $_SERVER['HTTP_X_FORWARDED_FOR'], рекомендую с ними ознакомиться.
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 15.06.2011, 19:27   #3
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Вот держы
Код:
function getip()
{
	if (getenv("HTTP_X_FORWARDED_FOR"))
	{
		$ip = $_SERVER["REMOTE_ADDR"];
		if (preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", getenv("HTTP_X_FORWARDED_FOR"), $ip3))
		{
			$ip2 = array("/^0\./", "/^127\.0\.0\.1/", "/^192\.168\..*/", "/^172\.16\..*/", "/^10..*/", "/^224..*/", "/^240..*/");
			$ip = preg_replace($ip2, $ip, $ip3[1]);
		}
	}
   	else
		$ip = $_SERVER["REMOTE_ADDR"];
	if ($ip == "") $ip = "x.x.x.x";
	return $ip;
}
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 15.06.2011, 19:39   #4
Minus_yu
Чатланин!
Форумчанин
 
Аватар для Minus_yu
 
Регистрация: 20.11.2010
Сообщений: 140
По умолчанию

PHP код:
function return_user_ip() {
            if(isset(
$HTTP_SERVER_VARS)) {
                if(isset(
$HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) {
                    
$realip $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
                } elseif(isset(
$HTTP_SERVER_VARS["HTTP_CLIENT_IP"])) {
                    
$realip $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
                } else {
                    
$realip $HTTP_SERVER_VARS["REMOTE_ADDR"];
                }
            } else {
                if(
getenv'HTTP_X_FORWARDED_FOR' ) ) {
                    
$realip getenv'HTTP_X_FORWARDED_FOR' );
                } elseif ( 
getenv'HTTP_CLIENT_IP' ) ) {
                    
$realip getenv'HTTP_CLIENT_IP' );
                } else {
                    
$realip getenv'REMOTE_ADDR' );
                }
            }
            return 
$realip;
        } 
Minus_yu вне форума Ответить с цитированием
Старый 16.06.2011, 07:39   #5
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

ужас какой )) вы б еще интегралы сюда добавили, чтоб посложнее выглядело.

PHP код:
function getip()
{
    if(!empty(
$_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP'];
    elseif(!empty(
$_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR'];
    else return 
$_SERVER['REMOTE_ADDR'];

и все... три строки и никакой лишней порнографии. лучше пару строчек для проверки того что пришло добавить (ибо вместо HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR могут подсунуть нечто экзотическое), чем писанину разводить на пол экрана.
Все генитальное просто.

Последний раз редактировалось kirosin; 16.06.2011 в 07:54.
kirosin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программка в Борланд Си... Программа есть... Ошибку не высвечивает но и не считает... Спасайте... Катюшенька Помощь студентам 1 18.05.2009 22:21