PHP Notice: Undefined index: REMOTE_ADDR Открывок из файла Код (Text): final class Login extends ClubPenguin { public function __construct() { parent::__construct(); Logger::Fine("Login server is online"); } protected function handleLogin($socket) { $penguin = $this->penguins[$socket]; if($penguin->handshakeStep !== "randomKey") { return $this->removePenguin($penguin); } $this->databaseManager->add($penguin); $username = Packet::$Data['body']['login']['nick']; $password = Packet::$Data['body']['login']['pword']; $ip = $_SERVER['REMOTE_ADDR'];
Если запускать из консоли (например в тестах) то половина суперглобальных переменных не определена. Не твой случай?
Мой, запускаю скрипт он как раз этот файл и вызывает. Да мне нужна проверка на айпи бан, в базе данных уже есть айпи, которому запрещен вход, нужно узнать айпи пользователя и сравнить
@Sasha55555, ну когда они к серверу подключаются, php запускается не из консоли, а сервером. И надо очень криво настроить сервер, чтоб в REMOTE_ADDR вообще не было. А если ты запускаешь из консоли, то у тебя не может быть REMOTE_ADDR
@nospiou нет для сайта, уже есть, там html страница загружается swf и подключение к php серверу, нужно чтобы сервер увидел айпи пользователя --- Добавлено --- чтобы бан проверять --- Добавлено --- Можно ли как-то получить айпи пользователя на html странице и передать php скрипту на сервере?
ну так например Код (Javascript): <script> function getIP(json) { alert("My public IP address is: " + json.ip); } </script> <script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Так а он вроде не отправляется Код (Text): <script> function getIP(json) { alert("My public IP address is: " + json.ip); } </script> <script src="https://api.ipify.org?format=jsonp&callback=getIP"></script> А как можно принять правильно на сервере POST-ом? Там ведь получается из html отправка нужна формой
это уже костыли. грузишь php страницу у тебя уже будет ip создаешь сессию и под эту сессию инициализируешь swf
Подождите, я просто не понимаю. У меня есть Html-страница, я на ней определил мой IP, затем PHP сервер должен получить айпи из HTML для проверки на IP-бан, как это по-проще сделать? Если сервер не может сам определить айпи пользователя
@Sasha55555, выводи html-страницу через PHP, и будет тебе IP. Ты только всех путаешь. У тебя @artoodetoo спросил не в консоли ли ты пытаешься php запускать, и получать IP пользователя. Ты ответил, что так и есть, и я тебе объяснил, что там никакого IP быть не может. А если у тебя всё-таки идёт из браузера запрос, тогда другой разговор. Но HTML просто выведи через php, он для того и придуман изначально, чтоб html формировать
Я сервер запускаю в консоли, а подключаюсь к нему через браузер, и при авторизации на сервере выдает PHP Notice: Undefined index: REMOTE_ADDR
пробуй так PHP: function get_client_ip() { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; } или так PHP: function get_client_ip() { $ipaddress = ''; if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP'); else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED'); else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR'); else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED'); else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR'); else $ipaddress = 'UNKNOWN'; return $ipaddress; }
@Sasha55555 , возможно у вас Apache + Nginx на VPS'ке, то там нужны настройки конфига ngnix'а, что бы IP-шник нормально определялся.