Ответ 1
Вы используете PHP-CLI?
HTTP_HOST работает в браузере.
Здесь код:
if (isset($_SERVER['HTTP_HOST']) === TRUE) {
$host = $_SERVER['HTTP_HOST'];
}
Как можно получить "неопределенный индекс HTTP_HOST" в строке внутри оператора if? Я имею в виду, что параметр индекса проверяется перед его использованием.
И почему HTTP_HOST иногда не может быть установлен?
Вы используете PHP-CLI?
HTTP_HOST работает в браузере.
HTTP_HOST всегда должен быть установлен, если вы работаете в браузере... тогда нет необходимости проверять... просто,
$host = $_SERVER['HTTP_HOST'];
достаточно
Обычно я опускал === TRUE
, поскольку он здесь не нужен, потому что isset()
возвращает логическое значение, но это не должно останавливать работу вашего кода.
Я бы также установил $ host разумным дефолтом (зависит от вашего приложения) перед оператором if. У меня есть общее правило не вводить новую переменную внутри условного, если она будет передана позже.
$host = FALSE; // or $host = ''; etc. depending on how you'll use it later.
if (isset($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST'];
}
Плохо реализованный браузер может пропустить информацию заголовка узла очереди отправки, попробуйте этот пример:
telnet myphpserver.com 80
> GET / <enter><enter>
в этом случае $ _SERVER ['HTTP_HOST'] не имеет назначенного значения, в этом случае вы можете использовать $ _SERVER ['SERVER_NAME'], но только если $ _SERVER ['HTTP_HOST'] пусто, потому что no - это то же самое.