W3docs

Функция PHP header_remove(): всё, что нужно знать

Функция header_remove() в PHP позволяет удалять HTTP-заголовки из исходящего ответа до их отправки клиенту. Узнайте синтаксис и типичные случаи применения.

Каждый PHP-ответ содержит набор HTTP-заголовков — метаданные, которые браузер читает ещё до того, как получит содержимое страницы (тип контента, правила кэширования, куки, перенаправления и т. д.). Иногда вы устанавливаете заголовок в начале скрипта, а затем решаете, что его не нужно отправлять. header_remove() — это встроенная функция, которая убирает заголовок из исходящего ответа до его отправки клиенту.

В этой главе рассматриваются синтаксис, необязательный параметр, условия работы функции и типичные сценарии её использования.

Что делает header_remove()

header_remove() удаляет заголовок, ранее поставленный в очередь через header() (или автоматически добавленный PHP), из списка заголовков, которые будут отправлены вместе с ответом. Поскольку PHP буферизует заголовки до начала потоковой передачи тела ответа, вы можете свободно добавлять и удалять их вплоть до этого момента.

Функция работает со списком исходящих заголовков, а не с заголовками запроса, полученными скриптом от браузера.

Синтаксис

header_remove(?string $name = null): void
  • $name — имя удаляемого заголовка (без учёта регистра, без двоеточия и значения), например "X-Powered-By". Параметр необязателен. Если его опустить (или передать null), будут удалены все установленные на данный момент заголовки.
  • Возвращаемое значение — отсутствует (void).

Удаление одного заголовка

<?php

header("X-MyHeader: Hello World!");
header_remove("X-MyHeader");

Здесь заголовок X-MyHeader ставится в очередь, а затем удаляется, поэтому браузер его так и не получит. Имя заголовка сопоставляется без учёта регистра, поэтому header_remove("x-myheader") удалит тот же заголовок.

Удаление всех заголовков

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

<?php

header("X-First: 1");
header("X-Second: 2");

header_remove(); // both X-First and X-Second are dropped

Это также очищает заголовки, которые PHP добавляет автоматически (например, X-Powered-By, если он включён), что является одним из наиболее распространённых практических применений — скрыть информацию о сервере до начала вывода.

Условия работы

Заголовки можно изменять только до отправки каких-либо данных вывода. Как только первый байт тела покидает скрипт — через echo, print, пробельный символ перед <?php или закрывающий тег ?> с последующей пустой строкой — заголовки отправляются и блокируются.

Используйте headers_sent(), чтобы проверить, можно ли ещё изменять заголовки, и headers_list(), чтобы просмотреть текущую очередь заголовков:

<?php

header("X-Debug: on");

if (!headers_sent()) {
    header_remove("X-Debug");
}

print_r(headers_list()); // X-Debug is no longer in the list

Если вывод уже начался, header_remove() ничего не сделает, и PHP выдаст предупреждение «headers already sent» — точно так же, как это делает header().

Типичные случаи применения

  • Скрытие отпечатка сервера. Удалите X-Powered-By, чтобы ответы не раскрывали версию PHP.
  • Отмена условного заголовка. Поставьте заголовок кэширования или перенаправления в начале, а затем удалите его, если более позднее условие изменит логику.
  • Сброс перед чистым перенаправлением. Очистите лишние заголовки перед выдачей нового header("Location: ...").

Заключение

header_remove() даёт точный контроль над исходящим HTTP-ответом: передайте имя, чтобы удалить один заголовок, или вызовите функцию без аргументов, чтобы очистить все. Используйте её в паре с headers_sent() и headers_list(), чтобы изменять заголовки только пока это разрешено, и вы сможете уверенно управлять тем, что получает браузер.

Практика

Практика
Какова функция header_remove() в PHP?
Какова функция header_remove() в PHP?
Was this page helpful?