Как найти и побороть BOM — неприятная ошибка в WordPress
Как-то раз, зайдя на свой блог я с удивлением обнаружил непонятную ошибку, что-то вроде:
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. За разработку следует поблагодарить Юрия Белотицкого.
Использование скрипта очень простое.
- Скачиваете нужный файлик
- Заливаете его на FTP сервер в корневую директорию. Если WordPress установлен не в корне сайта (а в папке blog, например), то скрипт нужно разместить в директорию, где лежит WordPress, и из нее же и запускать.
- Запуск очень простой — набираете в адресной строке броузера ссылку http://ваш.сайт/find_bom.php
В результате получите список файлов, которые являются неисправными. Кстати, для быстроты работы скрипт проверяет только те директории, куда пользователи, как правило, заливают файлы — корень, /wp-content/themes и /wp-content/plugins.
Вот, в принципе, и все. Как сложно пришлось решать такую простую проблему. Надеюсь, вам помог немного своим опытом, и теперь при появлении соответствующего предупреждения, вы будете знать, что делать:) Если не получается исправить тот или иной файл от BOM, можно просто залить новый из дистрибутива WordPress.
P.S. Для молодоженов подходящий сайт — организация банкетов и решение всех вопросов, связанных со свадьбой.
Аналогичная проблема была с движком форума SMF. Поборол также с помощью скриптика. Может быть даже этого :)
Спасибо за скриптик, наверное, облегчит жизнь. Я сам недавно со своим самописным движком бился долго с подобной проблемой. Однако, стоит отметить, что есть еще один частый случай этой ошибки — пробел в конце файла. Когда делается php include, а включаемый файл — это только php код, все равно бывает проблема из-за того, что редактор дописал пробел ПОСЛЕ ?>
Я Дримвивером редактирую обычно, он вроде ничего не дописывает сам
designer, им тоже пользуюсь. Правда пару раз были глюки, поэтому совмещаю Дримвивер и Akelpad.
Сталкивался пару раз с этой сигнатурой, легко убирается с помощью редактора «Komodo Edit».
designer, Tod, Dreamweaver может не добавлять BOM в файл, но идентифицировать и удалять — почему-то не всегда. Хороший пост!
Vanilla Man, кстати, да, насчет удаления хорошее замечание. Я вроде как проверял и сохранял ошибочный wp-config.php именно в Dreamweaver, но после перезаписи на FTP ничего не менялось. Поэтому я перезаливал файл из дистрибутива wordpress.
Выкиньте Дрим на помойку, если есть желание заниматься серьёзно веб-разработками…
Нотпад++ или его аналоги скрасят Вам жизнь…
Lex Nevermind, по-моему это холивар! Чем дрим хуже notepad++, если не использовать графический редактор?
Чем хуже: например добавляет мусор в код. Хотя настроить по идее можно, чтоб фигня всякая не лезла.
Ладно, обойдёмся без ховара :) Тоже юзал Дрим по началу. Потом само собой получилось, что отказался.
Lex Nevermind, если вы не умеете пользоваться каким-то инструментом, не нужно его необоснованно хаять. Вы профи в Дриме? Знаете все его настройки? Можете написать по нему книгу? Если да, тогда у вас есть право писать «Выкиньте Дрим на помойку», если нет — учите матчасть.
Дрим добавляет/удаляет код на основе указанных вами же стандартов HTML (в тегах DOCTYPE, html, head и др.), а также при генерации кода из визуального режима. Если вы недостаточно хорошо знаете HTML, в этом виноваты не в Макромедии и не в Адоб.
Недавно читал статью, в которой автор писал, что Фотошоп устарел и надо сайты рисовать в Иллюстраторе. По ходу обсуждения в комментариях выяснилось, что автор не знает ни о существовании папок для слоев в Фотошопе, ни о горячих клавишах.
HTML в достаточном количестве знаю :) И читайте комменты до конца. Там на написано: Ладно, обойдёмся без ховара :) Тоже юзал Дрим по началу. Потом само собой получилось, что отказался.
Я рад, что вы «в достаточном количестве» знаете HTML. И то, что вы решили обойтись «без ховара» на меня тоже произвело впечатление. К сожалению, я иногда раздражаюсь при виде поучений от «гуру» верстать сайты в блокноте и недружелюбно реагирую ;)
Извиняюсь, «холивара».
Также раздражаюсь при упоминании о Дриме. Очень я с ним не подружился. У каждого своя специфика.
В «достаточном количестве» потому, что считаю, что на уровне «гуру» знать что-либо практически невозможно. Если что-то понадобится, я смотрю в справочник или гугел в поиске умных словей.
К примеру, навскидку параметры тега MARQUEE я не назову. Да мне и не нужно :)
Постоянно пользуюсь Notepad++ — отличная программа с множеством возможностей.
«Подумал было — снова хакнули»
Можешь написать какие проблемы возникали и как ты их решал, когда взламывали сайт? У меня хакнули сайт по FTP — третий месяц не могу исправить. Исправить то, что на каждую выводимую ссылку привязывается какой-то левый скрипт (из-за этого в сапе все постоянно висит в error-e).
Alexol, посмотри файлы системы на наличие стороннего кода, в шаблоне глянь. Дабы избавиться можешь действовать радикально — сохранить БД, файл шаблона (если он чистый) и создать блог/сайт заново.
Все верно, сам работаю веб девелопером последние года 3, даже больше, и, до сих пор на блокноте плюс плюс сижу, лучше пока не нашел, к тому же приходится учить (чаще всего русских) клиентов что это такое и как побороть
Спасибо за статью. IE не воспринимал доктайп, если перед ним стояли пробелы. У меня был один пробел который получался из-за того что файлы шаблона были в utf-8. Поменял кодировку файлов, заработало.
Спасибо Вам! За статью!
Несколько дней мучалься с этой проблемой! Спасибо большое за статью!