|
Почетный модератор
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
|
|||||||||||||||||||||||||||||||||||||||||
Что означает предупреждение "headers already sent"09.08.2011, 11:14. Показов 106254. Ответов 76
На форуме часто бывают вопросы, что при использовании session_start(), header() и setcookie() и некоторых других функций, появляется сообщения типа
Если кому интересны подробности, то вот немного теории
Давайте разберёмся, что происходит, когда мы заходим на сайт. Например, когда мы в браузере открываем страницу http://www.example.ru/file.php, то браузер запрашивает у DNS сервера, какой IP адрес принадлежит серверу www.example.ru. После этого он подключается по протоколу TCP к этому IP адресу на порт 80 (этот порт используется по умолчанию для HTTP) и отправляет текстовый запрос наподобие такого:
Так же обязательным является параметр Host. Т.к. на каждом сервере может быть несколько разных сайтов, то мы должны указать, к какому именно сайту мы хотим обратиться. Остальные параметры необязательны... ими браузер просто рассказывает о себе (User-Agent) и рассказывает серверу, как он хочет общаться. Но сейчас речь не об этом... В ответ на этот запрос веб-сервер запускает выполнение нашего php-скрипта, к которому обращается браузер. И веб-сервер отправляет браузеру результат работы скрипта... но перед этим он отправит свои заголовки ответа.
И вот мы подошли к основной сути... когда PHP приказывает веб-серверу начать отправлять само содержимое брузеру, то веб-серверу не остаётся ничего, кроме как отправить вначале все заголовки, которые имеются у него на текущий момент. Поэтому после этого PHP уже не сможет изменить эти заголовки. Функция header() изменяет любой заголовок. Функция setcookie() добавляет куки к заголовку Set-Cookie, поэтому тоже не может работать после отправки заголовков. session_start() добавляет куки с идентификатором сессии (как в примере выше). А пока найдём пути решения этой проблемы. Чаще всего такие ситуации происходят из-за использования BOM. BOM - это 2 или 3 невидимых символа в начале файла. Эти символы указывают на то, какая используется кодировка. Многие текстовые редакторы по умолчанию добавляют BOM ко всем файлам юникодовской кодировкой (например UTF-8). Например, создадим в блокноте файл
Я вижу 2 пути решения это проблемы: 1. Включить в php.ini
2. Запретить текстовому редактору сохранять BOM. Но тут уже всё зависит от возможностей текстового редактора, который вы используете. Например, я пользуюсь Notepad++... там можно открыть меню "Кодировки" и выбрать "Преобразовать в UTF-8 без BOM". Если вы уверены, что BOM не используется, значит где-то перед функциями header(), setcookie() и т.п. вы сами отправляете данные пользователю. Возможно, перед открытием тега <?php есть пустая строка... её тоже нужно убрать. Если вначале вам необходимо отправлять данные, то можно включить использование буфера, что бы данные не отправлялись сразу браузеру:
57
|
|||||||||||||||||||||||||||||||||||||||||
| 09.08.2011, 11:14 | |
|
Ответы с готовыми решениями:
76
Что означает предупреждение " comparison between signed and unsigned integer expressions" Выходит предупреждение headers already sent by Событие A означает, что извлечены 3 зеленых, а событие В - извлечены 3 красных леденца. Что означает сумма А или B? |
|
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
|
|
| 09.09.2018, 20:30 | |
|
CyberX346, очень деструктивные мысли. Я лично не понимаю, как можно написать какую-то там CMS, не изучив основы протокола. А потом как угодно изворачиваться, лишь бы не признавать свою фундаментальную ошибку и исправлять ее основательно.
0
|
|
|
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
|
|
| 09.09.2018, 20:34 | |
|
output_buffering*boolean/integer
You can enable output buffering for all files by setting this directive to 'On'. If you wish to limit the size of the buffer to a certain size - you can use a maximum number of bytes instead of 'On', as a value for this directive (e.g., output_buffering=4096). This directive is always Off in PHP-CLI. Можем свериться? Я сейчас в больнице и у меня нет возможности постоянно ноутбук использовать. Предлагаю в качестве расследования выложить вашу конфигурацию сервера и параметр настройки. Интересует Cent os и ubuntu. Настройки мамп я тоже выложу. У меня не работало именно на ubuntu lamp и, если там стоит off или php в режиме cli то тогда все обьяснимо.
0
|
|
|
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
|
||||||
| 13.09.2018, 09:12 | ||||||
|
Вот. Выбрался на выходные из госпиталя и решил сразу проверить(с ноутбуком наконец-то).
Собственно реально все правда: если параметр выключить в htaccess у меня перестает работать авторизация. при
Все работает как надо. Видимо дело в моей недоосведомленности(да и не только моей) потому, что хостеры на этот простейший вопрос разводят руками и ничего внятного ответить не могут. Ну а теперь моя CMS пригодна для любого хостинга. Всем спасибо
0
|
||||||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|||
| 13.09.2018, 11:17 | |||
|
1
|
|||
|
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
|
|
| 13.09.2018, 12:30 | |
|
Ага. Только нагенерировать 4к до заголовков это еще проблема.
0
|
|
|
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
|
|
| 13.09.2018, 12:45 | |
|
CyberX346, можете "вечно дрожать" или надеяться на авось.
0
|
|
|
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
|
|
| 13.09.2018, 14:41 | |
|
Учиться программировать чтобы не выходить за 4к или брать году. Я цистерна писал на спор за 3 месяца по приколу. Еще неделю писал форум к ней. Правда до сих пор с ним и парюсь. А вам я не знаю чего пожелать. Разве что зарплаты тысяч так 80 хотя бы чтобы легче было...
0
|
|
|
0 / 0 / 0
Регистрация: 04.05.2019
Сообщений: 2
|
|
| 04.05.2019, 15:48 | |
|
кто нибудь умеет работать в лабвью?
0
|
|
| 04.05.2019, 17:28 | |
|
0
|
|
|
63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
|
|
| 28.05.2019, 18:25 | |
|
Приветствую, форумчане.
Столкнулся сегодня со странной историей. Если в <head> есть строчка <meta name="description" content=""> (именно такая, причем неважно - копипасченная или переписанная "от руки", то Cannot modify header information – headers already sent. Если я стираю только эту строчку - ошибка исчезает. Перепечатывал от руки, вставлял из других рабочих файлов. Кодировки, кавычки, пробелы внутри, пробелы до и после строчки, наличие символов из кириллицы, паразитные символы - все проверено. Идет реакция чисто на текст, такое ощущение :-) Решил пока ob_start'ом, но докопаться хочется и надо. Буду благодарен за помощь, спасибо.
0
|
|
|
Почетный модератор
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
|
||
| 29.05.2019, 00:20 [ТС] | ||
|
0
|
||
|
63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
|
||
| 29.05.2019, 00:23 | ||
|
Все одно и то же.
0
|
||
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
| 29.05.2019, 00:33 | |
|
AlexNewaro, значит неправильно организовано приложение - отправка тела ответа перед заголовками, в сочетании с директивой output_buffering. Добавляя текст превышается значение заданное в данной директиве и ошибка себя проявляет.
1
|
|
|
Почетный модератор
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
|
|
| 29.05.2019, 00:36 [ТС] | |
|
А если вместо этой строки добавить столько же пробелов? Может, там просто эта строка добавляет размер и переполняет буфер.
Иначе сравнивайте кодировку и наличие BOM. Добавлено через 40 секунд Не успел... Jewbacabra опередил
1
|
|
|
63 / 34 / 8
Регистрация: 07.02.2015
Сообщений: 125
|
|||
| 29.05.2019, 00:40 | |||
|
Всем огромное спасибо за помощь!
0
|
|||
|
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 72
|
||||||
| 17.09.2019, 23:22 | ||||||
|
Можете помочь.
У меня вылезла ошибка cannot modify header information В 35 в 36 и 38 строках где куки. По пробывал способ сохранения без BOM,не помогло,как решить ее?
0
|
||||||
|
Почетный модератор
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
|
||
| 18.09.2019, 00:54 [ТС] | ||
|
Так же проблема может быть, если одна из вызываемых функций выведет предупреждение. Но, думаю, вы бы это заметили.
0
|
||
|
0 / 0 / 0
Регистрация: 17.02.2019
Сообщений: 72
|
|||||||||||
| 18.09.2019, 00:59 | |||||||||||
|
Humanoid, Я кодировки поменял.
Теперь у меня другая проблема с скриптами. У меня не выводит логин авторизованного человека. Вместо него выводит Xm.Что-то не получилось Это скрипт проверки
0
|
|||||||||||
|
Почетный модератор
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
|
||
| 18.09.2019, 11:49 [ТС] | ||
|
NitrailS, не знаю. Предлагаю выводить отладочную информацию и анализировать, какое именно условие не подошло. Например, там, где вы выводите сообщение "что-то пошло не так" заодно через var_dump() выводите куки, _SERVER и userdata. После этого смотрите, какое значение оказалось неожиданным. Если не будет получаться, то создайте новую тему с вопросом... кто-нибудь, возможно, поможет. Просто, самому разобраться будет быстрее, чем ждать других людей.
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 1
|
|
| 24.09.2019, 14:59 | |
|
$&&& = mysqli_real_escape_string(); - это функция очистка от спец символов. Попробуй просто $&&& = rtrim();
Добавлено через 2 минуты А Humanoid - респект!
0
|
|
| 24.09.2019, 14:59 | |
|
Помогаю со студенческими работами здесь
60
Постоянные ошибки с сессиями (headers already sent и Cannot modify headers) Что означает появление письменности (языка), и что означает реформа письменности (языка)? Что означает, что определение метода находится внутри определения класса? Поясните пожалуйста что означает двоеточие и то что идет после него Что такое dy1 и dy2 в программе, и зачем мы их перемножаем. Что означает строчка x=x1 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|