Вконтакте Facebook Twitter Лента RSS

Безмятежный information headers. Исправление ошибки: cannot modify header information – headers already sent by

Как-то раз, зайдя на свой блог я с удивлением обнаружил непонятную ошибку, что-то вроде:

Warning: Cannot modify header information — headers already sent by (output started at /xxxxxxxx/wp-config.php:1)

Причем в админку зайти никак нельзя. Сразу же пошел проверять что не так с файлом wp-config.php. Все было на месте, пароли к БД правильные. Подумал было — снова хакнули)) Но опять же никаких признаков вандализма на FTP замечено не было. Самое странное (это меня в конце-концов окончательно запутало), что не работала только ссылка на сайт без www или наоборот (точно не помню). Начал стучать хостеру, смотреть настройки в админке домена — в общем, много чего.

А оказалось все намного проще — в начале файла конфига был некий BOM — маркер (сигнатура) для UTF-8 файлов. Именно поэтому выскакивала приведенная выше ошибка. Чтобы такого не случилось с вами в первую очередь нужно использовать редакторы кода, которые либо не ставят эту сигнатуру вообще, либо перед сохранением файла уточняют нужна ли она.

В некоторых текстовых редакторах вы можете найти в настройках флажки «Include Unicode Signature (BOM)», «Add Byte Order Mark» или подобные им. В противном случае, не имея возможности отключить ненужную опцию в той или иной программе, использовать ее не рекомендуется. На специализированных форумах можно найти список хороших текстовых редакторов, это — Notepad2, PSPad, UnicEdit, Notepad++ . О последнем вообще много пишут, достаточно мощный инструмент. У меня каким-то случайным образом на компа был в наличии альтернативный редактор — Akelpad — его для подобных задач и применяю.

Следует заметить вот еще какой момент — ошибка с BOM может быть не только в файле wp-config.php. Более того, при отключенной опции вывод предупреждений, вы вообще не увидите где закралась неполадка. В таких случаях (ну и всех других) я бы рекомендовал использовать простой скрипт для поиска файлов с BOM . За разработку следует поблагодарить Юрия Белотицкого .

Использование скрипта очень простое.

  1. нужный файлик
  2. Заливаете его на FTP сервер в корневую директорию. Если WordPress установлен не в корне сайта (а в папке blog, например), то скрипт нужно разместить в директорию, где лежит WordPress, и из нее же и запускать.
  3. Запуск очень простой — набираете в адресной строке броузера ссылку http://ваш.сайт/find_bom.php

В результате получите список файлов, которые являются неисправными. Кстати, для быстроты работы скрипт проверяет только те директории, куда пользователи, как правило, заливают файлы — корень, /wp-content/themes и /wp-content/plugins.

Вот, в принципе, и все. Как сложно пришлось решать такую простую проблему. Надеюсь, вам помог немного своим опытом, и теперь при появлении соответствующего предупреждения, вы будете знать, что делать:) Если не получается исправить тот или иной файл от BOM, можно просто залить новый из дистрибутива WordPress.

P.S. Для молодоженов подходящий сайт — организация банкетов и решение всех вопросов, связанных со свадьбой.

Understanding HTTP headers and HTTP header fields

HTTP headers provide vital information required for a HTTP transaction send via http protocol .

The general HTTP header format contains colon-separated name - value pairs in the header field. Each of the name-value pair end with a carriage return (CR) and a line feed (LF) character sequence. Empty fields at the end of each header indicate the end of the header.

The common header format followed by applications looks like:

Types of HTTP headers

There are four types of HTTP message headers. They are:

  • General Header
  • Request Header
  • Response Header
  • Entity Header

General Header

General Header fields have common applicability in request and response messages. The header fields apply only to the transmitted message and do not apply on the transferred entity.

The structure of a general header looks like:

Cache-control field specifies directives that have to be followed by every caching mechanism on a request and response system.

Connection field allows the sender to specify options required for a connection. The connection header has the following format:

Date field represents the date and time during the initiation of the message. The date format specified in HTTP look like:

Pragma field helps to include implementation specific directive applicable to any recipient on a request and response system.

Trailer field value specifies whether a set of header fields in message trailer is encoded with chunk transfer-coding.

Transfer-Encoding field indicate whether any type of transformation is applied to the message body.

Upgrade field enables clients to specify additional supported communication protocols. It also enables the server to switch protocols with the additional protocols.

Via field are mandatory fields used by proxies and gateways which indicate intermediate protocols. It also indicates request recipient between user-agent and server and response between server and client.

Warning field carries additional information on message status and message transformations which are not reflected in the message.

Warning headers are usually sent with responses.

The request header field allows clients to additionally pass request information and client information to the server.

The structure of a request header looks like:

Accept field specifies media types which are acceptable for response.

"*" is used to group media types in range

"*/*" indicate all media types

"type/*" indicate all subtypes of a type

Accept-Charset field indicates response acceptable character sets. It makes clients capable to understand special-purpose character sets to signal the server to represent the document in these character sets.

Accept-Encoding field is similar to Accept, restricts response acceptable content-coding.

Accept-Language field is similar to Accept, restricts preferred set of natural languages.

Authorization field is for user agents who wish to authenticate themselves with the server.

Expect field indicates server behaviors required by a client.

From field contains e-mail address of a user who controls the requesting user-agent.

Host field specifies the internet host and requested resource port number from user URI.

If-Match field is used to make conditional methods.

If-Modified-Since field is used to make a conditional method. If the requested variant is not modified within the specified time, the entity will not be returned from the server.

If-None-Match field allows efficient update of cache information with minimum transaction overhead.

If-Range field allows clients to receive part of the missing entity or otherwise, clients can ask to send the entire new entity.

If-Unmodified-Since field allows the server to perform requested operation if it has not been modified since the time specified in this field.

Max Forwards field provides mechanisms with TRACE and OPTIONS methods to limit the request forwarding proxies or gateways.

Proxy Authorization field allows client to identify to secure proxy.

Range field specifies the HTTP entities in HTTP messages represented as a sequence of bytes. HTTP retrieval request requests one or more sub range of entity using GET methods.

Referrer field allows clients to specify the address URI of the resource from which Request-URI is found.

TE field indicates extension transfer-coding it can accept in the response. Additionally, it indicates whether it will accept trailer fields in chunk transfer-coding.

User-Agent field contains information about the requesting user-agent.

HTTP Response Header

The response header field allows the server to pass additional information through the responses other than simple Status-Line response.

The structure of the response header looks like:

Accept-Ranges field enables servers to indicate acceptance of resource range requests.

Age field indicates sender the approximate amount of time since server responded.

ETag field provides current value of the entity tag for a request.

Location field redirects recipients to locations other than Request-URI to complete identification of a new resource.

Proxy-Authenticate field is a mandatory inclusion for proxy authentication response.

Retry-After field is used as a response when a service is unavailable to indicate the length of period for which service will remain unavailable to the client.

Server field contains information about software used by server to handle requests.

Vary field indicates request field that determine whether a cache is eligible to use the response of a request without revalidation of the response.

WWW-Authenticate field are used when a response message is unauthorized.

Entity header fields define metainformation about the entity-body or the requested resource. The entity-header format looks like:

Allow field list the set of methods supported by Request-URI identified resources.

Content-Encoding field is used as a media-type modifier.

Content-Language field describes natural language for clients of an entity.

Content-Length field indicates the size of an entity represented in decimal number.

Content-Location field provides resource location for an entity when it is accessible from a location other than Requested-URI.

Content-MD5 field provides message integrity check (MIC) using an MD5 digest on the entity body.

Content-Range field specifies where partial body of the full entity-body should be applied.

Content-Type field indicates whether the media type of the entity body is sent to the recipient or GET method is used to send requests.

Expires field provides the date/time after which the response becomes stale.

Last Modified field indicates the date and time of last modification of the variant.

The order in which field name appears in the header when received is insignificant. Conventionally general headers are placed first, followed by request or response header with entity header at the end.

Copyright Notice: Please don"t copy or translate this article without prior written permission from the сайт

HTTP Debugger is a proxy-less HTTP analyzer for developers that provides the ability to capture and analyze HTTP headers, cookies, POST params, HTTP content and CORS headers from any browser or desktop application. Awesome UI and very easy to use. Not a proxy, no network issues!

Удивительно сколь малая ошибка может привести в полностью нерабочее состояние ваш сайт на WordPress. Мы говорим, конечно же, об известной ошибке-предупреждении WordPress Warning: cannot modify header information – headers already sent by pluggable.php (не удаётся изменить информацию заголовка) . Если вы один из тех, кто столкнулся с этой ошибкой, тогда вы пришли по адресу. В этом мы обсудим прежде всего причину появления этой ошибки и посмотрим на пути решения, которые позволят окончательно решить проблему.

Перед стартом убедитесь в наличии следующего:

  • Доступ к вашей панели управления хостингом или FTP доступ

Как возникает ошибка Cannot modify header information – headers already sent by

Давайте рассмотрим пример этой ошибки, чтобы лучше понять причины. Ошибка обычно появляется в такой форме:

Warning: Cannot modify header information - headers already sent by (output started at /public_html/wp-content/plugins/my-plugin/my-function.php:#) in /public_html/wp-includes/pluggable.php on line #

Как видите, в ошибке упоминается два файла. Первый файл (в нашем случае: my-function.php размещённый в /public_html//wp-content/plugins/my-plugin/ ) во главе подозреваемых. Это наш пользовательский код, который предназначен для изменения функциональности ядра, обеспечиваемой WordPress. Функциональность ядра находится в файле pluggable.php (файл ядра WordPress, неизменный для любой установки WordPress). Иными словами, проблема в первом файле, который не даёт второму файлу выполняться должным образом.

Основной причиной ошибки являются лишние пробелы в первом файле . Это пробелы вверху или внизу файла, ненужные пробелы где угодно в файле или даже пробелы в PHP-тегах . К слову, по причине того, что программисты могут (и обычно так и происходит) ошибочно вбивать лишние пробелы в свой код, эта ошибка наиболее часто возникает, чем можно ожидать. Строка #, указанная в сообщении об ошибке, ссылается на место расположения проблемы – это поможет устранить проблему быстрее и без суеты.

Исправление ошибки cannot modify header information – headers already sent by

Теперь, когда вы знаете, что вызывает ошибку, вы можете перейти к её исправлению. Мы покажем вам два варианта устранения проблемы, которые вы можете попробовать по отдельности или по очереди, если по отдельности не помогло.

Вариант 1 – Редактирования неисправного файла

Первый вариант решения ошибки Warning: cannot modify header information – ручное исправление файла с ошибкой. Вы уже имеете в наличии необходимую информацию, для нахождения проблемы в самом сообщении об ошибке (помним, это первый файл в сообщении). Всё, что потребуется – это открыть этот файл по FTP, используя клиент вроде FileZilla или через файловый менеджер .

По существу, всё, о чём здесь нужно позаботиться – это убрать лишние пробелы/пустые строки в файле. Хорошее место для начала будет строка #, упомянутая в сообщении об ошибке. С этого места вы можете продолжить разбор остального файла в поисках других ненужных пробелов или пустых строк до самого конца документа.

Убедитесь в правильности написания начального и завершающего тегов PHP. Не должно быть пробела до или после тега , также как и тега ?> . Также, последняя строка кода не должна завершаться пробелом или лишнем переводом строки.

На скриншоте ниже вы можете увидеть файл wp-config.php , в котором есть пробелы перед первым тегом PHP.

ПОДСКАЗКА : Во многих текстовых редакторах удалить ненужные пробелы можно автоматически. Например, для удаления лишних пробелов в редакторе Atom , выделите весь код и перейдите в Packages -> Whitespace -> Remove Trailing Whitespace .

Вариант 2 – Заменить неисправный файл

Конечно, редактирование целого ряда файлов с ошибками может вызвать затруднение. Файлы могут относиться к плагину или теме, которые вы только что установили на своём сайте или даже могут быть файлами ядра WordPress.

Если ошибка действительно вызвана плагином или темой, всё что потребуется сделать – это переустановить его/её. Это действие в большинстве случаев помогает. С другой стороны, если файл ядра WordPress причина ошибки, лучшим решением взять чистую копию WordPress и заменить файл с ошибкой в вашей установке на такой же в исправной версии. Это будет гарантировать, что неисправный файл восстановлен в исходное состояние, в то время как остальная установка вашего сайта WordPress останется в целости и сохранности. Теперь, просто перезагрузите страницу и убедитесь, что ошибка исправлена.

В завершение

Независимо от того, вставили ли вы фрагмент кода в файл, добавили новый плагин/тему или написали код вручную, существует риск появления лишних пробелов в файле. Эти, казалось бы невинные пробелы, могут обернуться ошибкой WordPress Warning: cannot modify header information – headers already sent by .

В этом руководстве, мы рассмотрели как исправлять такие ошибки, и теперь ваш сайт опять работает как и положено. Больше руководств по WordPress можно найти .

Сегодня мы решили рассказать о том, что значит сообщение «Warning: Cannot modify header information — headers already sent by (output started at /home/...» , появившееся на странице сайта вместо его основного содержимого.
Как оказалось, в сети достаточно написано на эту тему, но нет обобщенной инструкции о том, что все это значит и как от этого избавиться.
Мы решили добавить несколько капель в огромное море информации на эту тему, поскольку столкнулись с данной проблемой лично.

Некоторое время назад мы осуществили перенос нескольких клиентских сайтов с одного хостинга на другой.
Все прошло нормально, сайты были доступны, но при попытке зайти в админ. панель, после ввода логина и пароля вместо панели управления появлялась белая страница.
Проверили на остальных сайтах — тоже самое.
Для того, чтобы узнать возможные причины, мы включили отображение ошибок.
Для этого необходимо по FTP отредактировать файл.htaccess, находящийся в корне сайта, добавив в него строку:

Php_flag display_errors on

После этого при входе в админ.панель появилось несколько сообщений вида «Warning: Cannot modify header information — headers already sent by (output started at /home/.../functions.php:1552) in /home/.../public_html/wp-login.php on line 362» и т.п.

В результате поисков была найдена информация, что это сообщение извещает о том, что информация заголовка не может быть изменена, потому что заголовки (информация о них) уже были ранее отправлены и далее в скобках указывалось какими именно строками в каких файлах это осуществлялось.


Заголовки (Headers ) — это служебная информация сервера, на котором расположен сайт. Перед тем, как браузер отобразит содержимое сайта, он принимает заголовки от сервера, где указываются различные данные: включено ли кэширование страницы, её кодировка, тип контента страницы и другие. В системах управления содержимым сайта заголовки формируются функциями, находящимися в различных файлах системы.
Обязательно условие — заголовки должны быть отправлены до основного содержимого (контента) страницы.


Если содержимое сайта передается до заголовков, то возникает ситуация, о которой нас предупреждает сообщение «Warning: Cannot modify header information — headers already sent by...»

В каких ситуациях это может возникать? Как уже говорили, в современных CMS заголовки являются результатом работы одной или нескольких функций. Сама функция это некий фрагмент кода, заключенный между начальным и конечным ?> тегами.

Все, что находится за пределами этих тегов считается контентом страницы.
Таким образом, если в начале страницы находятся функции, результатом работы которых являются отправляемые заголовки, и мы получаем сообщение «Warning: Cannot modify header information...», то получается что какая-то информация, относящаяся к контенту страницы отправляется с сервера до заголовков.

Что это за информация и как её найти. Чаще всего это пробелы и пустые строки.

Пробел или пустая строка интерпретируются как символы основного содержания страницы, поэтому получается, что часть основного контента находится перед заголовками и отправляется в браузер первой.

Нужно скачать файлы, указанные в сообщениях «Warning: Cannot modify header information...» на локальный компьютер, открыть в редакторе кода (я использую NotePad++) и внимательно проверить на наличие пустых строк и пробелов:

При этом есть одна важная особенность, которая может значительно увеличить время на поиски решения.
В файле может не оказаться пустых строк и пробелов, но если он был сохранен в кодировке UTF-8, то посторонний символ в самом начале документа может вставить редактор, в котором создавался файл. Этот символ — идентификатор UTF-8, равный пробелу с нулевой шириной, который в редакторе может вовсе не отображаться, но на сервере будет воспринят, как основное содержание и выведен до заголовков.

Для того, чтобы избавиться от данного идентификатора, необходимо пересохранить скаченные файлы в формат UTF-8 without BOM (UTF-8 без BOM).

С этой задачей отлично справляется NotePad++.

После этих действий и обновлений файлов на сервере, сообщение должно исчезнуть и сайт будет работать в привычном режиме.

Это сообщение об ошибке часто встречают программисты, начинающие использовать PHP. Понимание того, почему возникает эта ошибка, поможет найти решение.

PHP делает много работы по генерации веб-страниц за вас, даже без вашей просьбы. Веб-страница состоит из двух частей: заголовка и тела.

Эта распространенная ошибка PHP наблюдается когда программист делает ошибки в манипуляции или создания заголовков. Вот пример:

Warning: Cannot modify header information – headers already sent by (output started at /home/usr1/public_html/sent.php:42) in /home/usr1/public_html/includes/theme-header.php on line 12

Как правило, вам не нужно беспокоиться о заголовке, так как он генерируется автоматически и содержит информацию о странице, сервере, и coockie. Информация в заголовке важна, но она обычно не видна пользователю. Вот несколько примеров:

Date: Mon, 10 Jul 2006 18:51:59 GMT Server: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.7g Content-Encoding: gzip Content-Type: text/html

Иногда программисты хотят изменить некоторые значения заголовка. Например, если PHP генерирует XML вывод, Content-Type должен быть изменен, чтобы указать это. Другим распространенным примером является перенаправление браузера пользователя на другую веб-страницу с помощью элемента заголовка Location, как описано в этой статье .

Заголовок должен идти первым в ответе с веб-сервера и отделяется от тела одной пустой строкой. Причиной этой ошибки является то, что некоторая часть тела веб-страницы была отправлена ​​пользователю уже до того, когда делается попытка установить значение заголовка. Поскольку PHP упрощает многие вещи для вас, проблема может скрываться в обычном месте. Вот некоторые указания для нахождения проблемы:

  1. Найдите инструкцию header(), которая является причиной проблемы. Ошибка должна быть на или до этой линии.
  2. Посмотрите на любые инструкции, которые могли бы направить вывод пользователю до этой инструкции заголовка. Если вы обнаружили один или несколько, измените код, чтобы переместить инструкцию заголовка перед ними. Сложные условные операторы могут усложнить проблему, но они также могут помочь решить проблему. Как вариант можете применить условное выражение в верхней части сценария PHP, которое определяет значение заголовка как можно раньше, и устанавливает его там.
  3. Убедитесь, что нет пробелов за пределами начального и конечного PHP тэгов. В то время как пустая строка перед начальным тегом
  4. Если вы сохраняете ваш файл в кодировке UTF-8, то убедитесь, что файл сохраняется без сигнатуры (without BOM). Сигнатура — это байт, добавляемый в начале файла, и если PHP скрипт сохранить в таком формате, то этот байт будет воспринят как часть вывода тела страницы, чего нельзя допускать во избежание рассматриваемой нами проблемы.
© 2024 Windows. Инструкции. Программы. Железо. Ошибки