header
(PHP 4, PHP 5, PHP 7, PHP 8)
header — Надсилає необроблений (сирий) HTTP-заголовок
Опис
header(string $header, bool $replace = true, int $response_code = 0): void
Функциюheader() викликають для надсилання HTTP-заголовка. У » специфікації HTTP/1.1 докладно описані HTTP-заголовки.
Помните, функциюheader() дозволено викликати тільки якщо клієнту ще не були передані дані. Тобто вона повинна йти першою у висновку, перед її викликом не повинно бути HTML-тегів, порожніх рядків тощо. Іноді виникає помилка, коли при читанні коду файловими функціями на кшталт include або require у коді трапляються пробіли або порожні рядки, які виводяться до виклику функції header(). Ті самі проблеми можуть виникати, коли в одному файлі записані PHP-код та HTML-розмітка.
Loading...
Список параметрів
header
Рядок заголовка.
Існує два виклики заголовка, які відрізняються від інших. Перший - заголовок, який починається з рядкаHTTP/
»(Регістр не важливий). Цей заголовок визначає код стану HTTP для відповіді. Наприклад, якщо веб-сервер Apache через директиву ErrorDocument
налаштований на обробку запитів до неіснуючих файлів PHP-скриптом, то розробник, ймовірно, захоче переконатися, що скрипт генерує правильний код стану.
Loading...
Інший відмінний вид заголовка - "Location:". Він відправляє заголовок назад у браузер, а також повертає браузеру код стану REDIRECT
(302), якщо тільки код стану 201
или3xx
не було встановлено.
Loading...
replace
Необов'язковий параметр replace
визначає, чи повинен заголовок замінити попередній аналогічний заголовок або додати друге заголовок того ж типу. За умовчанням він замінить заголовок, але якщо передати false
, Як другий аргумент, можна примусово задати кілька однотипних заголовків. Наприклад:
Loading...
response_code
Примусово вказує код відповіді HTTP. Зверніть увагу, що цей параметр працює тільки тоді, коли рядок header
не пуста.
Значення, що повертаються
Функція не повертає значення після виконання.
Помилки
Якщо не вдалося запланувати надсилання заголовка, функція header() видає помилку рівня E_WARNING
Приклади
Приклад #1 Діалог завантаження
Якщо потрібно запропонувати користувачеві зберегти дані, що пересилаються, наприклад згенерований PDF-файл, вказують заголовок » Content-Disposition, який підставляє ім'я файлу, що рекомендується, і змушує браузер показати діалог збереження.
Loading...
Приклад #2 Директиви для роботи з кешем
PHP-скрипти часто генерують динамічний зміст, який не повинен кешувати браузер клієнта або проміжний кеш між сервером та клієнтським браузером. Проксі-сервери та браузери можуть примусово відключити кешування, передавши заголовки:
Loading...
Зауваження :
Бувають ситуації, в яких браузер не кешуватиме сторінки, навіть якщо наведені заголовки не були передані. Користувачам доступні установки браузера, які змінюють поведінку кешування за замовчуванням. Надсилаючи наведені заголовки, розробник повинен перевизначити будь-які налаштування, які в інших випадках призводять до кешування виведення скрипту.
Крім того, через функцію session_cache_limiter() та директиву
session.cache_limiter
можна автоматично створювати правильні заголовки, пов'язані з кешуванням під час роботи з сесіями.
Приклад #3 Налаштування cookie
функцією setcookie() зручно встановлювати cookies. Щоб встановити cookie з атрибутами, які не підтримують функцію setcookie(), викликають функцію header()
Наприклад, наступний код встановлює cookie з атрибутом Partitioned
Loading...
Примітки
Зауваження :
Доступ до заголовків та їх висновок здійснюватиметься лише у випадку, якщо у SAPI є їх підтримка.
Зауваження :
Щоб уникнути цієї проблеми, можна буферизувати висновок скрипта. Тоді всі дані, що виводяться, буферизуватимуться на сервері, поки не буде дана явна команда на пересилання даних. Керувати буферизацією можна вручну - функціями ob_start() і ob_end_flush(), або поставивши директиву
output_buffering
у конфігураційному файлі php.ini, або налаштувавши конфігурацію сервера належним чином.
Зауваження :
Рядок заголовка HTTP-стану буде відправлений клієнту першим, незалежно від того, чи викликана функція header() першою чи ні. Статус можна перевизначити у будь-який час викликом функції header() з новим рядком стану, якщо HTTP-заголовки ще не були надіслані.
Зауваження :
Специфікація HTTP/1.1 вимагає, щоб як аргумент заголовка » Location: був вказаний абсолютний URI, який би включав схему, ім'я хоста та абсолютний шлях, хоча іноді клієнти можуть приймати і відносні URI. Абсолютний URI можна побудувати самому через елементи $_SERVER['HTTP_HOST'] $_SERVER['PHP_SELF'] або функцією dirname() :
Loading...
Зауваження :
Ідентифікатор сесії не буде передаватися разом із заголовком Location, навіть якщо увімкнено налаштування session.use_trans_sid. Його потрібно передавати вручну, використовуючи константу
SID
Дивіться також
- headers_sent() - Перевіряє, чи були надіслані заголовки
- setcookie() - Надсилає cookie
- http_response_code() - Отримує або встановлює код відповіді HTTP
- header_remove() - Видаляє раніше встановлені заголовки
- headers_list() - Повертає список переданих заголовків (або готових до відправлення)
- Розділ документаціїHTTP-автентифікації