Какой-то бред получается. Скрипт почему-то вместо того, чтобы записать в БД IP посетителя, он постоянно записывает IP сервера. Хотя $REMOTE_ADDR работает нормально ИП показывает, но с БД проблемы. Почему он записывает ИП сервака??? Где-то мне приходилось слышать, что если не включены глобальные переменные, то $REMOTE_ADDR не фурычит. Так ли это??? Васпче запутался. mysql_db_query($db, "INSERT INTO Online VALUES ('$t_stamp','$REMOTE_ADDR','')") or die("INSERT Error");
Это так. Используй $_SERVER[ 'REMOTE_ADDR' ]; Хотя если он ИП показывает нормальный, то это тут не причем. А про IP сервака это вообще бред какой-то. Ты в этом уверен?
PHP: <? # строка с IP юзера function OOPSGetIP() { global $HTTP_SERVER_VARS; $IP = $HTTP_SERVER_VARS["REMOTE_ADDR"]; if(isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) { $IP .= " ".$HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; } $IPS = split("[ ;,]+",$IP); $IP = ""; while(list($i,$VAL) = each($IPS)) $IP .= $VAL.","; $IP = substr($IP,0,strlen($IP)-1); return $IP; }?> для новых PHP подставить нужные масивы
Использовал $_SERVER[ 'REMOTE_ADDR' ]; Пробовал на отдельной страничке, мой ип показывает, но вот при добавлении в БД всё-равно вместо ИП посетителя вписывает ИП сервака. В службе поддержке ничего по этому поводу не могут сказать.
Mil-ast, а ты проверь на той страничке на которой записывается в БД. Выведи REMOTE_ADDR. Выведи запрос свой Код (Text): "INSERT INTO Online VALUES ('$t_stamp','$REMOTE_ADDR','')" А потом смотри в базу. Если в запросе и в базе будут различные ипы, то тогда это уже чудеса.
Пробовал и продолжаю пробовать все известные мне способы. Вот еще. if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $ip = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $ip = getenv('HTTP_FORWARDED'); } else { $ip = $_SERVER['REMOTE_ADDR']; } mysql_db_query($db, "INSERT INTO Online VALUES ('$t_stamp','$IP','')") or die("INSERT Error"); echo "<b>$IP</b>"; Да, выводит он мой ИП, но в БД уперто пихает своё. В общем ИП он определяет верно, но что тогда с БД? Ладно, если сумею разобраться, сообщу!!
Всё, я разобрался. Интересно получилось. Но глюк один есть. Скрипт полностью рабочий. Вот он: PHP: <? include "config.php"; $t_stamp = time(); $timeout = $t_stamp - $to_secs; mysql_connect($server, $db_user, $db_pass) or die ("CONNECT Error"); mysql_db_query($db, "INSERT INTO Online VALUES ('$t_stamp','$REMOTE_ADDR','')") or die("INSERT Error"); mysql_db_query($db, "DELETE FROM Online WHERE timestamp<$timeout") or die("DELETE Error"); $result = mysql_db_query($db, "SELECT DISTINCT ip FROM UsersOnline") or die("SELECT Error"); $user = mysql_num_rows($result); mysql_close(); echo "<b>$user</b>"; ?> Вся проблема в том, что если запустить файл с этим скриптом, всё работает и записывает в БД нужный IP, однако если вставлять этот файл в другие страницы сайта <? include "etotfile.php";>, то и возникает эта канитель. В этом случае он и вписывает не мой IP, а IP сервака. Почему такое происходит мне до сих пор не понятно. У кого есть соображения по этому поводу?
... во всяком случае у меня так и получается. Для примера можно глянуть на моей страничке http://www.hono.ru/s.php - сначала смотреть эту страницу! Здесь этот файл вставлен через include (в самом низу цифра). Здесь он и записывает ИП сервака, а не ваш. http://www.hono.ru/online/users.php - а это и есть тот самый исходный файл. Здесь он и запишет ваш IP и покажет цифру на еденицу больше, т.е. тут всё в порядке.