Восстановление Bitrix: преодоление ограничений памяти и размера файла

Раздел: Администрирование CMS -> Восстановление Bitrix

Восстановление Bitrix из бекапа: проблема с нехваткой места и ограничениями PHP

При попытке восстановить сайт на CMS "1С-Битрикс" через скрипт restore.php пользователи часто сталкиваются с ошибкой "Недостаточно места" или "Прервано из-за нехватки памяти". Причина кроется не в физическом дисковом пространстве, а в лимитах PHP: memory_limit, upload_max_filesize, post_max_size, max_execution_time. Далее рассмотрены способы обойти эти ограничения.

Как увеличить лимиты PHP через .htaccess, чтобы восстановить бекап без ошибок?

Самый простой и часто работающий способ - добавить директивы в файл .htaccess в корневой директории сайта (там же, где лежит restore.php).

Пример кода для .htaccess:

php_value upload_max_filesize 200M
php_value post_max_size 200M
php_value memory_limit 512M
php_value max_execution_time 300
php_value max_input_time 300

Restore php bitrix не могу место (недостаточно места при восстановлении bitrix через restore.php)

Пояснение: Каждая строка устанавливает соответствующий параметр. upload_max_filesize и post_max_size отвечают за размер загружаемого архива; memory_limit - объём памяти для выполнения скрипта; max_execution_time - максимальное время работы скрипта в секундах. После сохранения файла необходимо перезагрузить веб-сервер (Apache) или подождать несколько секунд, если используется mod_php.

Типичная ошибка: Сервер возвращает 500 Internal Server Error. Это означает, что модуль mod_rewrite не поддерживает директивы php_value (например, при использовании FastCGI или PHP-FPM). Решение описано в следующем разделе.

Другая проблема: После добавления директив restore.php всё равно не видит изменений. Необходимо убедиться, что файл .htaccess читается сервером (проверить AllowOverride All в конфигурации Apache).

Как изменить лимиты PHP, если сервер использует PHP-FPM или FastCGI?

Для таких конфигураций директива php_value в .htaccess не работает. Альтернатива - использовать файл .user.ini (поддерживается во многих современных хостингах).

Пример .user.ini:

upload_max_filesize = 200M
post_max_size = 200M
memory_limit = 512M
max_execution_time = 300
max_input_time = 300

Этот файл кладётся в корень сайта (вместе с restore.php). Изменения применяются сразу, без перезапуска сервера.

Ошибка: Если хостинг не поддерживает .user.ini, можно попросить администратора увеличить лимиты глобально через php.ini или пул PHP-FPM. В некоторых случаях помогает создание собственного php.ini в директории restore.php (требуется поддержка PHP_INI_PERDIR).

Как восстановить бекап через командную строку, избежав лимитов веб-сервера?

Если веб-сервер не позволяет изменить лимиты, а у вас есть доступ к SSH, можно запустить restore.php из консоли. Это снимает ограничения по времени и памяти (используются значения из CLI-версии PHP).

Команда:

php /путь/к/restore.php

Перед запуском убедитесь, что архив бекапа лежит рядом с restore.php или укажите путь через браузерный интерфейс (в консольном режиме скрипт запросит путь).

Проблема: Команда может не выполниться из-за нехватки оперативной памяти на сервере. Тогда следует временно увеличить лимиты PHP для CLI-режима в файле php.ini (обычно /etc/php/8.x/cli/php.ini).

Как разбить большой дамп, чтобы обойти ограничение на размер загрузки?

Если архив бекапа занимает более 200-500 МБ, его загрузка через браузер часто прерывается. Решение - разделить дамп на части с помощью архиватора (tar, zip с разбивкой).

Пример разбивки tar-архива:

tar -cvzf backup.tar.gz /путь/к/папке/сайта
split -b 100M backup.tar.gz backup_part_

Затем на сервере собрать обратно: cat backup_part_* > backup.tar.gz. После этого можно запустить restore.php, указав целый файл.

Типичная ошибка: Split создаёт файлы с суффиксами aa, ab, ac. При склеивании через cat порядок сохраняется, но нужно убедиться, что нет дополнительных файлов.

Как увеличить время выполнения restore.php, если скрипт обрывается спустя 30 секунд?

Если лимиты PHP уже установлены, но процесс всё равно сбрасывается, возможно, проблема в настройках прокси-сервера (Nginx, load balancer). Для Nginx нужно увеличить proxy_read_timeout и fastcgi_read_timeout.

Пример для Nginx (в секции server):

proxy_read_timeout 600;
fastcgi_read_timeout 600;
client_max_body_size 200M;

После изменений перезагрузить Nginx: nginx -s reload.

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

Расширенные примеры для восстановления Bitrix через restore.php

Пример 1: Проверка текущих лимитов PHP с помощью phpinfo() – создание временного скрипта.

Пример

<?php
phpinfo();
?>

Сохранить как info.php в корень сайта, открыть в браузере. Искать строки memory_limit, upload_max_filesize и т.д. После проверки удалить файл.

После открытия выводится таблица со значениями директив. Например:
memory_limit = 128M
upload_max_filesize = 64M

Пример 2: Временное увеличение memory_limit непосредственно в restore.php.

Пример

// В самом начале файла restore.php (после <?php)
ini_set('memory_limit', '512M');
ini_set('max_execution_time', 300);
ini_set('upload_max_filesize', '200M');
ini_set('post_max_size', '200M');

Результат: скрипт работает с заданными параметрами, даже если php.ini устанавливает меньшие значения.

После внесения изменений загрузка архива и распаковка выполняются без ошибок при условии, что хватает физической памяти.

Пример 3: Установка переменных окружения для PHP-FPM через pool.d.

Пример

; В файле /etc/php/8.1/fpm/pool.d/www.conf (или аналогичном)
php_admin_value[memory_limit] = 512M
php_admin_value[upload_max_filesize] = 200M
php_admin_value[post_max_size] = 200M
php_admin_value[max_execution_time] = 300

После изменения перезапустить PHP-FPM: systemctl restart php8.1-fpm.

Значения становятся доступны для всех сайтов на пуле. Проверить через phpinfo().

Пример 4: Разбивка ZIP-архива для обхода лимита на размер файла.

Пример

# Создать многотомный ZIP (размер тома 100 МБ)
zip -s 100m backup.zip backup.tar.gz
# На сервере объединить
zip -F backup.zip --out full_backup.zip
После объединения получается единый файл full_backup.zip, который можно использовать в restore.php.

Пример 5: Запуск восстановления из консоли с указанием php.ini собственного.

Пример

php -c /путь/к/my_php.ini /путь/к/restore.php

В файле my_php.ini прописать необходимые лимиты. Результат: скрипт использует указанный конфигурационный файл, полностью обходя ограничения веб-сервера.

Восстановление выполняется в терминале, прогресс отображается построчно.
Останавливается только при нехватке оперативной памяти.

Пример 6: Настройка Nginx для прямой загрузки больших файлов (через sendfile).

Пример

location / {
    proxy_pass http://backend;
    proxy_request_buffering off;
    client_max_body_size 500M;
}
Значение client_max_body_size должно быть больше размера загружаемого архива. Если не задать, запрос обрывается с кодом 413.

Недостаточно места при восстановлении Bitrix через restore.php - comments

En
Restore php bitrix не могу место (php)