В этой статье мы рассмотрим основные причины и решения возникновения ошибки "Невозможно изменить заголовки - т.к. они уже были отправлены"("Cannot modify header information - headers already sent by").
Что означает эта ошибка?
Чтобы разобраться с причинами возникновения ошибки, нужно сначала разобраться с тем, что такое эти "заголовки".
Не будем углубляться в теорию. Скажем лишь, что перед тем как любой пользователь открывает веб-страницу, ему посылаются эти самые "заголовки", которые содержат в себе кодировку, язык сайта, данные о сервере и прочую служебную информацию. Стоит так же отдельно добавить, что куки и сессия так же отправляются в заголовках.
Какие команды вызывают эту ошибку?
Ошибку "Cannot modify header information - headers already sent by" могут вызывать такие PHP-команды, как header, setcookie и другие, связанные с работой куки или сессий.
Причины и решения возникновения ошибки.
Самая частая ошибка происходит из-за не опытности. Мы уже разобрались, что заголовки отправляются до того, как начинает загружаться сама страница.
Но программисты, особенно начинающие попросту забывают или даже не знают этого. И сначала пытаются что-то вывести на странице - чаще всего при помощи команды echo, а потом устанавливают куки, посылают заголовки и т.д. Что приводит как раз к этой ошибке.
Вот пример кода, который приведет к такой ошибке:
А вот правильный вариант:
Т.е., во-первых, нельзя ничего выводить до отправки заголовков!
Не всегда это очевидно, но есть ошибка с небольшим различием. Это когда php-документ у вас начинается с пробелов или пустых строк, что подразумевает вывод в браузере этих строк.
За этим бывает очень сложно следить, так как например Windows блокнок может добавить вначале Byte Order Mark, никак нас не предупредив и даже не показывая этот символ. В этом случае стоит открыть документ при помощи других редакторов и проверить.
Вот пример по неправильному заданию заголовков:
Т.е., во-вторых, перед <?php не должно быть пустых строк или даже пробелов.
Особо внимательным стоит быть, если вы используете команду include, по сути она объединяет все файлы и делает один результирующий, и если вы сначала подключили шапку сайта(слайдер, меню и т.д.) а потом в основном файле пытаетесь отправить заголовки, то у вас конечно вылезет эта ошибка.
Вот пример такого неправильного кода:
а вот файл header.php
Добавить комментарий
Авторизоваться с помощью: