Битрикс. Запускаем функции битрикса в отдельном php файле

Для того чтобы, запустить php скрипты, использующие API битрикса, нужно определить серверные переменные переменные, отключить статистику и подключить ядро без header'а с заголовками шаблона битрикса:

#!/usr/bin/php
<?php
$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/www"; // или можно еще так: realpath(dirname(__FILE__)."/../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

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

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
set_time_limit(0);

//пишем код

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); //если ругается на него php, то комментим и дальше пользуемся
?>

#!/usr/bin/php - обычно можно не указывать путь к интерпретатору, но если он другой, то нужно указать, дабы исключить в дальнейшем ошибки

Далее ставим права на выполнение:

chmod +x /home/bitrix/www/../myscript.php

Кратко для тех кто не знает про chmod:

  • +x - позволяет только запускать скрипт (работает быстрее)
  • +rx - позволяет запускать и просматривать содержимое скрипта

Запускаем в терминале наш скрипт:

php -f /home/bitrix/www/../myscript.php

Видим, что если мы не применили бы наши переменные и не отключили бы статистику, у нас бы была страница с авторизацией вместо скрипта, а так, сам скрипт выполняется, теперь его можно вешать на крон, не боясь, что он "не откроется на выполнение".

Чтобы повесить на крон, допустим каждую минуту (например проверка почты), нужно в терминале:

crontab -e

Добавить строчку:

*/1 * * * * /usr/bin/php/ -f /home/bitrix/www/../myscript.php

Допустим ситуация такая, что на хостинге нет интерпретатора php, а только сам модуль с php для апача, тогда скрипт будет таким:

<?php
if ($_SERVER['REMOTE_ADDR']!='127.0.0.1') die(); // Защита от постороннего запуска

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

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
set_time_limit(0);

//пишем код

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); //если ругается на него php, то комментим и дальше пользуемся
?>

Вот, такие пироги, удачи из прошлого! ^_^

Комментарии (1)
  • Александр 23 декабря 2021, 14:31 # 0
    0
    1. Написать комментарий