Не понятна разница между этими двумя возможностями. насколько я понимаю, что приведеный мною ниже пример выполняет одно и тоже или нет? Код (Text): <?php $ip = getenv('HTTP_CLIENT_IP'); $ip = $_SERVER['HTTP_CLIENT_IP']; ?>
прочитала но не все поняла. Хочу теперь задать такой вопрос - разбирала один пример авторизации, и поняла, что возможно не совсем понимаю как он работает. Просьба объяснить. Код (Text): <?php function get_ip() { if ($ip = getenv("HTTP_CLIENT_IP")) { return $ip; } if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { if ($ip == '' || $ip == "unknown") { $ip = getenv("REMOTE_ADDR"); } return $ip; } if ( $ip = getenv("REMOTE_ADDR") ) { return $ip; } } ?> Как я вижу в функции задано аж 3 условия. Первый вариант при условии, что удалось получит реальный IP обойдя прокси, второй, если прокси не дает реального ip, то хотя бы получить IP прокси, а 3-е условие вообще непонятно зачем, потому, что предыдущий пункт и так уже это действие выполнит. И как понять по какому же из условий будет определен IP? В каком порядке будет выполняться проверка? Зааранее благодарна.
koopakaru Во-первых, getenv может не работать, если РНР установлен на IIS. Во-вторых, функция getenv возвращает вам переменные окружения, а именно $_ENV ! Этот глобальный массив может не регистрироваться (php.ini -> GPCS). А почему "же"? Будут выполнены они в таком порядке, в каком написаны.
Да нет, я все по тому же вопросу пытаюсь разобраться в разнице $_ENV и $_SERVER массивах. Вроде использует одни и те же возможности, даже написание идентичное а разница какая-то есть, а вот понять ее не могу. Когда что лучше использовать. И вообще как то раньше я не сталкивалась с $_ENV, а вот сейчас никак не могу въехать... А пример скрипта это для примера привела. Вот и перечитала про этот $_ENV многое, но вся документация по нему как-то очень сложно написана. Вот если бы на примерах реально показать, в чем разница, то я бы наверное сообразила бы быстрее. Кстати за линк спасибо. Очень интересно рассказано о простых вещах. Жаль что не видела этой статьи пол-года назад...
koopakaru 1. Открываем php.ini 2. Находим директиву variables_order 3. Видим значения (по-умолчанию GPCS) 4. Убираем S 5. Перезапускаем веб-сервер 6. Пробуем в скрипте сделать <?php echo $_SERVER['REMOTE_ADDR']; ?> 7. Получаем ошибку Undefined index: REMOTE_ADDR 8. Пробуем получить через getenv Может теперь наконец будет ясно, что всё зависит от желания, будут зарегистрированы эти массивы или нет.
$_ENV содержит переменные окружения системы, $_SERVER содержит переменные настройки сервера. Сервер может и наследует определенную часть настроек из системных, поэтому некоторые значения могут совпадать. В случае запуска php как консольной программы, многих данных в массиве $_SERVER просто не будет.