XML declaration allowed only at the start of the document

  • 26.10.2016
  • 5 991
  • 3
  • 11.09.2022
  • 3
  • 3
  • 0
XML declaration allowed only at the start of the document

В данной статье пойдет речь о том, как исправить ошибку "XML declaration allowed only at the start of the document", которая может появляться в некоторых случаях при переносе сайта на новый хостинг.

Описание

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

This page contains the following errors:
error on line 2 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.

wordpess-error
После гугления обнаружилось, что одной из причин такой ошибки может быть наличие разных символов/пробела/переноса строки в первой строке php файлов текущей темы оформления для WordPress. Переходим к поиску злоумышленника!
Для рекурсивного поиска всех php файлов в директории и отображения только тех, где первая строчка начинается не с <?php я наваял вот такую последовательность команд:

find /srv/www/pc.ru/wp-content/themes/sysadmin/ -type f -name '*.php' -exec grep -Hnm1 '' {} \;| grep -v ':1:<?php'

find /srv/www/pc.ru/wp-content/themes/sysadmin/ -type f -name '*.php' - Поиск всех php файлов в директории /srv/www/pc.ru/wp-content/themes/sysadmin/
-exec grep -Hnm1 '' {} \; - Для каждого файла запускаем grep. Параметр H - отображает название текущего файла, n - отображает номер строки, m1 - останавливает поиск после первого же совпадения, '' - пустое условие поиска. Таким образом мы из каждого файла берем только первую строку, а также в ней оставляем название файла и номер этой самой строки.
grep -v ':1:<?php' - Параметр v - означает инверсию, т.е. выводит только то, что не совпадает с условием поиска ':1:<?php' В результате выполнения, данная последовательность команд выведет список всех php файлов в директории, первая строчка которых НЕ НАЧИНАЕТСЯ с символов "<?php". Далее остается только отредактировать найденные файлы и убрать из них мусор. В моем случае оказалось, что проблема была из-за невнимательного редактирования - один из файлов темы начинался с символа переноса строки.

Была ли эта статья Вам полезна?

Комментарии к статье (3)

    • Сергей

    Доброго! в вашей статье меня заинтересовал набор команд лоя поиска ишибок. Я воспользовался вашим набором, но, не знаю уже куда его вводить. Спасибо за ответ.

    • Приведенная команда актуальна для операционных системах Linux (и некоторых других ОС). Соответственно, для выполнения данных команд, у вас должен быть доступ к консоли сервера, где возникает данная ошибка.

    • Артём

    Спасибо больше! С помощью вашей статьи решил свою задачу:))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.