Сегодня каждый пользователь может сделать свой сайт на любом движке, в т.ч. бесплатном – Joomla, WordPress и других. Освоить азы программирования по имеющейся в сети информации тоже не составит труда. Но иногда даже малейшая ошибка в коде, допущенная при разработке сайта, может привести к его неработоспособности. И сегодня мы рассмотрим проблему Cannot modify header information — headers already sent by. И как исправить её самостоятельно, чтобы все работало без сбоев, а также разберём почему она появляется.
Что означает выражение Cannot modify?
На русский язык полный текст сообщения переводится как “Нет возможности изменить заголовки – они уже были отправлены”. У этого сообщения могут еще быть такие варианты.
Почему выходит такая ошибка? Чтобы понять это, необходимо узнать, как браузер отвечает на запросы пользователя. Когда мы открываем страницу, нам в первую очередь присылаются заголовки, в которых содержится следующая информация:
- данные о сервере;
- кодировка;
- куки;
- язык сайта;
- сессия;
- другая служебная информация.
Ошибку Cannot modify header information — headers already sent by вызывают такие PHP-команды, как setcookie, header и другие, влияющие на работу сессий или куки.
Почему выходит ошибка и как её исправить в Вордпресс?
Как мы рассмотрели выше, в первую очередь перед загрузкой страницы нам посылаются заголовки с важной информацией, а потом уже приходят запрошенные данные. По неопытности или невнимательности программисты допускают ошибку в исходном коде. Они пытаются вначале определить другие функции (чаще всего, используя, при этом команду echo), а после этого уже занимаются установкой куки или отправкой заголовков. Чаще всего из-за этого и выскакивает ошибка на WordPress.
Рассмотрим на примерах, как выглядит рассматриваемая нами проблема.
Размещение информации перед заголовками
Сначала изучим один тип ошибки, когда программист действует по неопытности либо невнимательности. Здесь показан некорректный вариант.
А сейчас – верное написание кода.
Посмотрим внимательно на картинки и найдем место, куда закралась ошибка. Как видно в неправильном варианте, перед заголовком header идет строка echo. Вот это и есть причина проблемы – никакую информацию нельзя выводить раньше заголовков. Сначала идут данные строки header и только потом – все остальное.
Появление лишнего пробела
Причиной появления ошибки Cannot modify header information может быть и лишний пробел, который незаметен при первом взгляде. Если он присутствует в коде, то, естественно, и будет загружаться раньше, чем заголовки. В результате пользователь увидит на экране сообщение об ошибке. Пустой пробел может появиться самостоятельно, если документ открывался в стандартном блокноте Windows. Этот редактор может, не уведомляя нас, добавить служебный символ Byte Order Mark, который выставляет лишний пробел перед заголовком. Чтобы проверить, в этом ли дело, документ необходимо открыть в любом другом редакторе и проверить. Возможно, в файле будет такая ситуация, как на картинке ниже.
Как видим, первая строка начинается не с <?PHP, а с пробела перед данной комбинацией. Его необходимо убрать и проблема будет устранена.
Использование команды include
Многие программисты допускают ошибку при использовании команды include. Она применяется для объединения всех файлов и создания одного итогового. И, если попытаться вначале подключить шапку сайта (меню, слайдер и т. п.). А после этого оформить заголовки, то, естественно, появится сообщение об ошибке Cannot modify…
Чтобы решить проблему, необходимо функцию header (setcookie либо session_start) в скрипте разместить первой.
Обычно в сообщении об ошибке содержится информация о том, где её искать.
После слов output started следуют сведения о том, в какой строке скрипта появилась ошибка. Необходимо пройти по этому пути и, увидев проблему, решить её – убрать лишний пробел либо поставить функцию header в самом начале.
Замена неисправных файлов
Если ошибка закралась в установленные на WordPress плагины либо темы, то их можно переустановить. Но проблема может быть также в файлах ядра. В этом случае необходимо взять файл из чистой версии движка и инсталлировать его на место проблемного. Остальные (корректные) настройки сайта на WordPress останутся нетронутыми.
Заключение
Мы узнали, что означает сообщение об ошибке с текстом Cannot modify header information — headers already sent by. А также определили пути поиска проблемы и способы её решения – удаление лишнего пробела, установка функции header в самом верху скрипта или замена неисправных файлов.
2 комментария