Есть ответы на вопросы сертификации? Хочешь поделиться новостью о своем проекте? Тогда пиши нам!

Пример реализации консольного скрипта с подключением ядра 1С-Битрикс

Пример реализации консольного скрипта с подключением ядра 1С-Битрикс

Давно известно, что ряд операций выносят в отдельные php файлы и запускают из консоли, так как это зачастую удобнее, быстрее, да и в принципе на эти операции не нужен браузер. Как пример таких операций, можно привести:

  1. парсинг XML файлов;
  2. обработка изображений;
  3. обновление каталога товаров;
  4. и другие.

Для подключения ядра 1С-Битрикс, необходимо определить переменные и обязательно надо $_SERVER['DOCUMENT_ROOT']. Условимся, что все консольные скрипты мы будем хранить в папке /local/console/. Тогда для подключения ядра, необходим следующий код:

$_SERVER['DOCUMENT_ROOT'] = str_replace('\\', '/', realpath(dirname(__FILE__) . '/../../'));
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

Теперь путь до корня сайта у нас есть, благодаря этому сможем подключить ядро битрикса. При необходимости можем определить ряд констант:

define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_CHECK", true);

Константа NO_KEEP_STATISTIC запрещает сбор статистики на данном скрипте, NO_AGENT_CHECK - выключим выполнение всех агентов, так как у нас и так скорее всего довольно трудоемкая операция, нет нужды еще и агенты запускать. Также после подключения ядра Битрикса, необходимо скинуть буферизацию, для этого добавим такие строки:

while (ob_get_level()) {
    ob_end_flush();
}

В итоге у нас получится, примерно такой каркас для всех консольных скриптов-приложений, использующих ядро Bitrix:

set_time_limit(0);
ini_set('memory_limit', '1024M');

$_SERVER['DOCUMENT_ROOT'] = str_replace('\\', '/', realpath(dirname(__FILE__) . '/../../'));
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_CHECK", true);

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
while (ob_get_level()) {
    ob_end_flush();
}

$iTime = time();

//Ваши операции

/**
 * Отладочная информация
 */
$sMemory = (!function_exists('memory_get_usage')) ? '-' :
    round(memory_get_usage() / 1024 / 1024, 2) . ' MB';
$iTime = time() - $iTime;

echo 'Memory: ' . $sMemory . PHP_EOL . 'Time: ' . $iTime . ' s' . PHP_EOL;

Данный скрипт замеряет расход памяти и время выполнения в секундах, если второй параметр скорее всего у нас и так будет большим, (иначе, зачем в консоле выполнять скрипт?), то первый надо стараться минимизировать. Для оптимизации расхода памяти, надо вовремя удалять переменные, массивы, объекты, закрывать все файлы после работы с ними и так далее. Надеемся, что данный пример поможет в реализации Ваших проектов!

 1879 Битрикс, Bitrix, PHP, Разработка, Консоль
17 ноября 2017
Команда BXCert

Наша команда разрабатывает портал BXCert, а также занимается разработкой сайтов на CMS 1С-Битрикс. Все участники являются сертифицированными специалистами Bitrix.

Возможно Вам будет интересно

Комментарии