Кохана - Командная строка

Я пытаюсь выполнить "faux-fork" процесс (электронное письмо, отправляемое через SMTP) в моем веб-приложении, и приложение построено на Kohana.

    $command = 'test/email';
    exec('php index.php '.$command.' > /dev/null/ &', $errors, $response);

Я получаю сообщение об ошибке -

Notice: Undefined index: SERVER_NAME

Когда я просматриваю файл index.php Kohana, я вижу, что он ищет переменную с именем SERVER_NAME, но я думаю, что она приближается к NULL, потому что Kohana не смог обнаружить это значение и установить его перед запуском.

Любые идеи о том, как заставить Кохану работать через командную строку?

Ответ 1

Насколько я знаю, вы не можете запускать файлы kohana непосредственно в командной строке из-за своих методов начальной загрузки.

Вы могли бы сделать 2 вещи: экспортировать все команды как функции вне kohana и запускать их независимо.

Что-то еще, что вы могли бы сделать, это запустить его через index.php, расположенный в главной папке kohana, передавая ему $controller, переменные $method, чтобы он заканчивался на нужном объекте, где находится ваш код:

Для коханы 2:

php index.php controller/method/var1/var2

Кохана 3

php index.php --uri=controller/method/var1/var2

Edit: У Kohana есть отличный бегун для задач CLI от версии 3.3 и далее в качестве официального модуля. Для версии 3.2 он по-прежнему является неофициальным модулем. Я предлагаю вам использовать их, потому что они предоставляют множество дополнительных опций при запуске из CLI:

Ответ 2

Изучив исходный код Kohana3, я обнаружил, что он поддерживает cli (system/classes/kohana/cli.php). Вы можете передать 3 варианта (uri, method, get, post). Итак: -

$ php index.php --uri="items/list"

будет вызывать метод list в Controller_Items.

Ответ 3

И Kohana2 просто php index.php controller/method/param1/param2/etc

Kohana был построен для работы на CLI, а также в сети.

Ответ 4

Если вы используете Kohana 3, вы можете запустить его с терминала.

Пример

php index.php --uri=controller/action

Функции

  • - URI
  • - метод
  • - получить
  • - сообщение

Ответ 6

У меня была аналогичная проблема

Вы или кто-то добавил SERVER_NAME в файл index.php?

Если это так, либо удалите код вне index.php (и или загрузочный), либо вы можете его обернуть в

if (PHP_SAPI === 'cli') 
{ 
   // ... 
}  else {
 //....
}