Привет,
Данный пост является дополнением к предыдущей статье.
Отдельно вынесен он потому, что тут будет частично решена отдельная проблема выгрузки из 1С.[spoiler] При больших объёмах каталога, даже при использовании zip-архивирования, возникают проблемы, связанные с нехваткой ресурсов хостинга. В частности распаковка большого архива с увесистыми xml-файлами и большим количеством картинок может не уложиться в таймаут сервера или время выполнения скриптов PHP. Проблема встречается не так редко, архивы на сервер передаются и в 200mb и 400mb - импорт падает на стадии распаковки, т.к. она не пошаговая.
Ну поможем нам некий "секрет" метода CIBlockXMLFile::UnZip(), который используется в компоненте bitrix:catalog.import.1c для распаковки архива.
У данного метода есть 4 входных параметра:
$file_name - путь к zip-архиву
$last_zip_entry - последний извлечённый файл архива
$start_time - время начала распаковки
$interval - интервал, время шага распаковки
В компоненте данный метод вызывается только с первыми 2-мя параметрами, т.е. распаковка одношаговая. Ну, наверно, кто хотел это узнать, тот давно в курсе:)
Если в компоненте заметить строку:
на
то распаковка будет учитывать время выставленное в настройках интеграции с 1С.
Есть тут один минус: если очередной извлекаемый файл очень большой, то и пошаговость не спасёт - пока текущий файл не распакуется, метод свою работу не прекратит, а значит процесс может быть "убит" по ресурсам.
Выложил компонент, с этой модификацией + модификация из предыдущего поста.
Параметр STEP_BY_STEP_UNZIP='Y' включает пошаговую распаковку.
При импорте в 1С будет отображаться последний извлечёный на предыдущем шаге файл.
Это был +100500! Пока
Данный пост является дополнением к предыдущей статье.
Отдельно вынесен он потому, что тут будет частично решена отдельная проблема выгрузки из 1С.[spoiler] При больших объёмах каталога, даже при использовании zip-архивирования, возникают проблемы, связанные с нехваткой ресурсов хостинга. В частности распаковка большого архива с увесистыми xml-файлами и большим количеством картинок может не уложиться в таймаут сервера или время выполнения скриптов PHP. Проблема встречается не так редко, архивы на сервер передаются и в 200mb и 400mb - импорт падает на стадии распаковки, т.к. она не пошаговая.
Ну поможем нам некий "секрет" метода CIBlockXMLFile::UnZip(), который используется в компоненте bitrix:catalog.import.1c для распаковки архива.
У данного метода есть 4 входных параметра:
$file_name - путь к zip-архиву
$last_zip_entry - последний извлечённый файл архива
$start_time - время начала распаковки
$interval - интервал, время шага распаковки
В компоненте данный метод вызывается только с первыми 2-мя параметрами, т.е. распаковка одношаговая. Ну, наверно, кто хотел это узнать, тот давно в курсе:)
Если в компоненте заметить строку:
$result = CIBlockXMLFile::UnZip($_SESSION["BX_CML2_IMPORT"]["zip"], $_SESSION["BX_CML2_IMPORT"]["last_zip_entry"]); |
на
$result = CIBlockXMLFile::UnZip($_SESSION["BX_CML2_IMPORT"]["zip"], $_SESSION["BX_CML2_IMPORT"]["last_zip_entry"],$start_time,$arParams['INTERVAL']); |
то распаковка будет учитывать время выставленное в настройках интеграции с 1С.
Есть тут один минус: если очередной извлекаемый файл очень большой, то и пошаговость не спасёт - пока текущий файл не распакуется, метод свою работу не прекратит, а значит процесс может быть "убит" по ресурсам.
Выложил компонент, с этой модификацией + модификация из предыдущего поста.
Параметр STEP_BY_STEP_UNZIP='Y' включает пошаговую распаковку.
При импорте в 1С будет отображаться последний извлечёный на предыдущем шаге файл.
Это был +100500! Пока
