Неопределенный индекс HTTP_HOST, даже если он проверен

Здесь код:

if (isset($_SERVER['HTTP_HOST']) === TRUE) {
  $host = $_SERVER['HTTP_HOST'];
}

Как можно получить "неопределенный индекс HTTP_HOST" в строке внутри оператора if? Я имею в виду, что параметр индекса проверяется перед его использованием.

И почему HTTP_HOST иногда не может быть установлен?

Ответ 1

Вы используете PHP-CLI?

HTTP_HOST работает в браузере.

Ответ 2

HTTP_HOST всегда должен быть установлен, если вы работаете в браузере... тогда нет необходимости проверять... просто,

$host = $_SERVER['HTTP_HOST'];

достаточно

Ответ 3

Обычно я опускал === 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'];
}

Ответ 4

Плохо реализованный браузер может пропустить информацию заголовка узла очереди отправки, попробуйте этот пример:

telnet myphpserver.com 80
> GET / <enter><enter>

в этом случае $ _SERVER ['HTTP_HOST'] не имеет назначенного значения, в этом случае вы можете использовать $ _SERVER ['SERVER_NAME'], но только если $ _SERVER ['HTTP_HOST'] пусто, потому что no - это то же самое.