Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Эти задачи обычно единичные, нет смысла писать к ним визуальный интерфейс, проще запустить в консоли.
Возьмем пример из FAQ для использования вместе с cron и адаптируем для нашей обработки данных с выводом в консоль промежуточных значений, чтобы видеть как исполняется скрипт.
В новых версиях 1c-bitrix отключить буферизацию старым способом через константу BX_BUFFER_USED уже не получается, поэтому весь вывод скрипта осуществится в момент его завершения, что нас на устраивает.
Посмотрим, что внутри, какие буферы используются.
даст на выходе
Определение константы буферизации BX_BUFFER_USED в true уберет только CMain::EndBufferContent, остальные уровни буферизации останутся.
Поэтому после подключения ядра добавляем цикл, который сбросит все буферы
Простой пример-счетчик на 10 секунд, выводящий каждую секунду новое число:
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Отключаем буферизацию в консольных скриптах битрикса
Часто нужно запустить обработку данных, которая занимает много времени и ход которой хотелось бы визуально контролировать.Эти задачи обычно единичные, нет смысла писать к ним визуальный интерфейс, проще запустить в консоли.
Возьмем пример из FAQ для использования вместе с cron и адаптируем для нашей обработки данных с выводом в консоль промежуточных значений, чтобы видеть как исполняется скрипт.
В новых версиях 1c-bitrix отключить буферизацию старым способом через константу BX_BUFFER_USED уже не получается, поэтому весь вывод скрипта осуществится в момент его завершения, что нас на устраивает.
Посмотрим, что внутри, какие буферы используются.
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); print_r(ob_list_handlers()); |
даст на выходе
Array ( [0] => default output handler [1] => default output handler [2] => CMain::EndBufferContent ) |
Определение константы буферизации BX_BUFFER_USED в true уберет только CMain::EndBufferContent, остальные уровни буферизации останутся.
Поэтому после подключения ядра добавляем цикл, который сбросит все буферы
while (ob_get_level()) { ob_end_flush(); } |
Простой пример-счетчик на 10 секунд, выводящий каждую секунду новое число:
#!/usr/bin/php <?php set_time_limit(0); ini_set('mbstring.func_overload', "2"; ini_set('mbstring.internal_encoding', "UTF-8"; $_SERVER["DOCUMENT_ROOT"] = "/var/www/"; $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; define("LANG", "ru"; define("BX_UTF", true); define("NO_KEEP_STATISTIC", true); define("NOT_CHECK_PERMISSIONS", true); define("BX_BUFFER_USED", true); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; while (ob_get_level()) ob_end_flush(); $startExecTime = getmicrotime(); for($i = 0; $i< 10; $i++) { print "\n$i"; sl eep(1); } echo "\nScript works " . (getmicrotime() - $startExecTime) . " sec\n"; require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"; ?> |
Назад в раздел
Подписаться на новые материалы раздела: