XML declaration allowed only at the start of the document

  • 26.10.2016
  • 2 101
  • 0
  • 18.03.2019
  • 1
  • 1
  • 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/sysadmin.ru/wp-content/themes/sysadmin/ -type f -name '*.php' -exec grep -Hnm1 '' {} \;| grep -v ':1:<?php'

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

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

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

Ваш адрес email не будет опубликован.

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