Запуск CLI контроллера по HTTP

2

Скрипт для запуска консольных контроллеров по http для демонстрации клиентам.

<?php
// "php cli.php shop myPluginRun" -> "http://site.ru/cron.php?app=shop&controller=myPluginRun"
require_once realpath(__DIR__.'/wa-config/SystemConfig.class.php');
$config = new SystemConfig('cli');

$controller = ifset($_GET['controller'], '');
if (!strpos($controller, 'Plugin')) {
    throw new waRightsException('Контроллер плагина не найден.');
}
    
echo 'Выполнение начато.'.PHP_EOL;
try {
    waSystem::getInstance(null, $config)->dispatchCli(array(
        __FILE__,
        ifset($_GET['app'], 'shop'),
        $controller
    ));
    echo 'Выполнение завершено.';
} catch (Exception $e) {
    waLog::log($e->getMessage(), 'cron.log');
    echo 'Возникла ошибка, подробности в лог файле "cron.log".';
}

2 комментария

  • +1
    Eugen Nichikov Eugen Nichikov 6 октября 2018 11:57 #

    Немного по-другому делал, т.к. в примере выше нельзя передать доп. параметры, например:

    php cli.php shop yandexmarketPluginExport 2

    И кроме того cli-контроллер плагина технически может не содержать суффикса Plugin. Достаточно такого наименования shopMyplagenCli, чтобы запускалось cli.php shop myplagen

    • +1
      enso_studio@mail.ru enso_studio@mail.ru 6 октября 2018 13:32 #
      в примере выше нельзя передать доп. параметры

      это решаемо

      foreach ($_GET as $key => $value) {
          waRequest::setParam($key, $value);
      }
      cli-контроллер плагина технически может не содержать суффикса Plugin

      Проверку делал для защиты от запуска cli контроллеров приложений.

      С wget/curl мало кто из клиентов знаком, а начинать объяснения себе дороже.

      Добавление новых комментариев к этой теме отключено.