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-файл має складну структуру з просторами імен і повторюваними тегами <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 і успішно імпортували сайт? Розкажіть у коментарях, який спосіб спрацював у вас, і чи стикалися з тим, що частина контенту втрачалася під час імпорту.