Рішення проблеми Can not add header information - headers already sent
Часто таке ж повідомлення з'являється при старті сесій, в трохи іншому формулюванні:
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
Для початку дізнаємося, як взагалі спілкується броузер з сервером. Відбувається це за спеціальним протоколом
setcookie
, session_start()
, посилають HTTP заголовки. Розберемо тепер це попередження.
Warning: Cannot add header information - headers already sent by (output started at /www/script.php:5) on line 20
Cannot add header information - headers already sent
. Все ясно написано. "Не можу послати заголовок, поїзд вже пішов" - пише нам РНР. Далі РНР повідомляє, в якому скрипті і в який його рядку ( output started at /www/script.php:5
) стався висновок інформації, що викликав автоматичну посилку заголовків. Дуже легко знайти і виправити. Може бути, там html теги, може бути, echo, а може і просто непоміченим порожній рядок або пробіл перед першим тегом <?
. Дуже часто таку помилку викликає файл, що підключається через
include
, в якому або є якийсь висновок, або порожній рядок після закриваючого PHP тега - виявити її дуже важко. Для вирішення цієї проблеми потрібно функцію
header
() (або session_start
(), setcookie
) і всю логіку, яка її викликає, помістити ДО будь-якого виведення в броузер. Просто перенести вище в скрипті. Адже ви все одно перенаправляє браузер. Тобто, ніякої текст все одно не буде виведений! Значить, і виводити щось одночасно з заголовком Location немає сенсу. Правильно плануйте структуру свого скрипта: блок, який обробляє POST, не повинен нічого виводити в браузер.
Іноді ви перевірили ВСЕ - ніде нічого немає. Змініть редактор. Подивіться свій файл в іншій програмі. Наприклад, Windows Блокнот при використанні кодування Unicode додає в початок вашого файлу службовий символ Byte Order Mark, ніяк при цьому не ставлячи до відома. Відкрийте скрипт в іншому редакторі і видаліть сторонні символи. І змініть Блокнот на інший редактор.
Численні питання на форумі змушують мене зробити тут важливе зауваження:
Ця помилка з'являється немає від того, що у вас в скрипті "що то написано вище". А від того, що РНР виводить щось в браузер. Це не обов'язково код. Це може бути повідомлення про помилку. може бути пробіл або хтмл тег. Так Так. Для найталановитіших: мова йде про будь-якому символі, відправленому в браузер, а не тільки про тих, які браузер відображає недосвідченому користувачу. У HTML сторінок є вихідний текст. І саме він є результатом роботи PHP скрипта, а не красиві літери з картиночками, як думає дуже велика кількість людей.
by phpfaq.ru
Коментарі
Коментуючи, пам'ятайте про те, що зміст і тон Вашого повідомлення можуть зачіпати почуття реальних людей, проявляйте повагу та толерантність до своїх співрозмовників навіть у тому випадку, якщо Ви не поділяєте їхню думку, Ваша поведінка за умов свободи висловлювань та анонімності, наданих інтернетом, змінює не тільки віртуальний, але й реальний світ. Всі коменти приховані з індексу, спам контролюється.