Skip to content

Всё для WordPress, веб-разработки — и не только

🪓 Как разделить большие XML-файлы при импорте в WordPress

🪓 Как разделить большие XML-файлы при импорте в WordPress

Экспортировали сайт, а файл весит 30 мегабайт и не лезет на новый хост? Стандартный импорт WordPress молча обрывается на полпути, и часть контента просто теряется. Знакомая картина для тех, кто переезжает со старого сайта с сотнями постов.

Причина, жёсткие лимиты хостинга: upload_max_filesize (обычно 2-8 МБ), post_max_size и таймаут скрипта в 30 секунд. WXR-файл (WordPress eXtended RSS) с многолетним контентом легко переваливает за эти границы.

Вот четыре работающих способа разделить большой XML на части и импортировать всё без потерь. От самого простого к продвинутому.

💡 Быстрый обзор:

  • Поднимите лимит загрузки через поддержку хостинга, это самый быстрый путь, если провайдер идёт навстречу.
  • Нужен офлайн-инструмент под конкретную ОС, пробуйте десктопные WXR File Splitter (Windows) или WXR Split (Mac).
  • Кроссплатформенный вариант без установки, онлайн-сплиттер WXR разбивает файл прямо в браузере.
  • Работаете через командную строку, WP-CLI wp import принимает несколько файлов и не упирается в веб-лимиты.

Почему импорт обрывается: три лимита, которые мешают

WordPress при импорте упирается не в один, а сразу в три барьера.

  • upload_max_filesize, максимальный размер одного загружаемого файла. На дешёвом хостинге это 2 МБ, на среднем, 8-32 МБ.
  • post_max_size, общий размер POST-запроса. Должен быть больше upload_max_filesize, иначе файл не дойдёт до обработчика.
  • max_execution_time, время выполнения скрипта. Если импорт длится дольше 30-60 секунд, процесс обрывается, даже если файл загрузился.

Экспорт со старого сайта, где 500 записей и тысячи комментариев, легко даёт XML на 15-25 МБ. Такой файл в стандартный лимит не влезает.

Способ 1: Попросить хостера поднять лимиты

Самый простой путь, написать в поддержку хостинга. Большинство провайдеров поднимают upload_max_filesize до 64-128 МБ по запросу, особенно на тарифах выше базового.

Если доступ к настройкам сервера есть у вас, добавьте в wp-config.php:

1define('WP_MEMORY_LIMIT', '256M');

И создайте файл .user.ini в корне сайта (для хостингов с PHP-FPM):

1upload_max_filesize = 128M
2post_max_size = 128M
3max_execution_time = 300

На shared-хостингах .user.ini работает не всегда, тогда только через тикет в поддержку.

После изменения лимитов загрузите исходный WXR-файл через Инструменты → Импорт → WordPress. Если файл всё ещё не проходит, переходите к разделению.

Способ 2: WXR File Splitter для Windows

Для Windows есть классическая десктопная утилита WXR File Splitter. Интерфейс у неё аскетичный, но задачу решает: открываете WXR-файл, указываете количество частей или максимальный размер каждой, нажимаете «Split Files», и получаете несколько XML-файлов в той же папке.

Окно WXR File Splitter с данными XML-файла

Утилита показывает количество элементов в файле до разбивки, постов, страниц, комментариев. Это помогает прикинуть, на сколько частей делить.

Обратите внимание: инструмент старый, оригинальный сайт разработчика больше не работает. Если утилита не запускается на Windows 10/11, сразу переходите к способу 4 (онлайн-сплиттер), он надёжнее.

Способ 3: WXR Split для Mac

Владельцам Mac доступен аналог, WXR Split. Логика та же: загружаете XML, задаёте размер частей, получаете набор файлов для последовательного импорта.

Интерфейс WXR Split с выбором размера выходных файлов

Как и в случае с Windows-версией, официальный сайт инструмента может быть недоступен. Не тратьте время на поиски, веб-сплиттер из следующего шага работает на любой ОС.

Способ 4: Онлайн-сплиттер wxrfilesplitter.com

Самый практичный вариант на сегодня, бесплатный веб-инструмент WXR File Splitter. Работает в браузере, не требует установки, не привязан к операционной системе.

Как разделить файл:

  • Откройте wxrfilesplitter.com.
  • Загрузите WXR-файл, ограничение по размеру 256 МБ, чего с запасом хватает для любого сайта.
  • Укажите желаемый размер частей, разработчик рекомендует 2 МБ для стабильного импорта.
  • Нажмите Submit и скачайте архив с разделёнными XML-файлами.

Инструмент не хранит файлы на сервере, временные данные чистятся ежечасно. После разбивки импортируйте каждый файл через стандартный Инструменты → Импорт → WordPress один за другим.

Главный плюс: вам не нужно искать утилиту под свою ОС или разбираться с командной строкой. Всё в браузере за пару кликов.

Способ 5: WP-CLI import (для тех, кто работает через консоль)

Если у вас есть SSH-доступ к серверу и установлен WP-CLI, импорт можно сделать без всякого разделения, или с разбивкой для скорости.

WP-CLI принимает сразу несколько файлов:

1wp import file1.xml file2.xml file3.xml --authors=create

Флаг --authors=create создаёт учётные записи авторов, если их нет на новом сайте.

У этого метода два преимущества: во-первых, WP-CLI работает через командную строку и не ограничен веб-лимитами PHP; во-вторых, можно передать директорию с разделёнными частями одной командой.

Чтобы включить детальное логирование при импорте, добавьте в wp-config.php:

1define('IMPORT_DEBUG', true);

Тогда WP-CLI выведет подробный отчёт по каждому обработанному элементу, видно, что импортировалось, а что пропущено.

⁉️🤔 Частые вопросы

Файл 40 МБ, ни один способ не помогает, что делать?

Скорее всего, проблема не в размере, а в таймауте. Даже разделённый на части по 2 МБ файл может зависнуть, если сервер не справляется с обработкой каждой части за 30 секунд. Попросите хостера увеличить max_execution_time до 300. Или используйте WP-CLI, он не зависит от веб-таймаутов.

Можно ли просто разбить XML в текстовом редакторе?

Технически да, но практически нет. У WXR-файла сложная структура с namespace-ами и повторяющимися тегами <item>, каждый из которых содержит полный пост с мета-данными. Ручная нарезка почти гарантированно сломает XML, импортёр WordPress выдаст ошибку парсинга. Пользуйтесь специализированными инструментами.

Обязательно ли разбивать файл, если я переезжаю на нормальный VPS?

На VPS лимиты настраиваете вы сами, поднимите upload_max_filesize и post_max_size до 128 МБ, и файл загрузится целиком. Но с таймаутом осторожнее: даже на мощном сервере импорт 500 записей с медиафайлами может занять 2-3 минуты. Увеличьте max_execution_time или всё же разделите файл для страховки.

Что делать, если часть контента не импортировалась после разбивки?

Проверьте, что импортировали ВСЕ полученные файлы. Распространённая ошибка: скачали архив из wxrfilesplitter.com, загрузили первый файл и остановились. Каждый файл содержит свою порцию элементов, пропуск любой части означает потерю этих записей. Импортируйте последовательно, дожидаясь завершения каждого.

А что насчёт плагинов импорта, например WP All Import?

WP All Import умеет читать большие XML и импортировать их по частям (chunking), но он заточен под импорт данных в произвольные типы записей и поля ACF, а НЕ под импорт стандартного WXR с постами/страницами/комментариями как они есть. Для задачи «перевезти сайт целиком» берите описанные выше инструменты.

Итоги: чем разбить XML под вашу задачу

Универсального инструмента нет, выбор зависит от того, какой доступ у вас к серверу и насколько велик файл.

  • Если можете написать в поддержку хостинга, начните с поднятия лимитов. Это 5 минут и часто решает проблему без всякой разбивки.
  • Файл до 256 МБ, нет консольного доступа, веб-сплиттер WXR решит задачу в браузере за пару кликов.
  • Есть SSH и WP-CLI, wp import с директорией разделённых файлов, самый надёжный и быстрый способ.
  • Олдскульные десктопные утилиты (WXR File Splitter / WXR Split) держите как запасной вариант, они работают на старых системах, но сайты разработчиков уже недоступны.

Разделили XML и успешно импортировали сайт? Расскажите в комментариях, какой способ сработал у вас, и сталкивались ли с тем, что часть контента терялась при импорте.