Вопрос

Я настроил Cron, чтобы позвонить URL в Kohana 3.

php /home/user/public_html/index.php my/route/in/bootstrap.php

Кажется, он доступ к URL -адресу.

Тем не менее, я получил эту ошибку (отправьте обратно в электронное письмо, которое мой хост отправляет на Cron)

Undefined index:  HTTP_HOST
SYSPATH/classes/kohana/url.php [ 40 ]

Источник url.php

Который находится в системном файле Кохана. Это потому, что работа Cron не отправляет заголовки HTTP?

Как я бы поправил это и заставил его работать (надеюсь, не взломав основные файлы).

Или я неправильно делаю Крона?

Обновлять

Пекка предоставил Хороший ответ, Однако я хотел бы избежать изменения основных файлов (хотя я буду в качестве последней среды).

Казалось бы, Кохана 3 делает иметь поддержку CLI, так как есть статическое свойство $is_cli.

http://github.com/kohana/core/blob/master/classes/kohana/core.php#l54

Это было полезно?

Решение

Кажется, что у тебя есть E_STRICT Уведомление включено, и обработка ошибок Коханы улавливает это. E_STRICT будет жаловаться на неопределенные индексы. Индекс действительно неопределен, потому что в скрипте PHP нет HTTP_HOST, когда вы вызываете через CLI.

Скорее всего, ваш сценарий работает нормально, несмотря на это. Вам придется отказаться error_reporting В какой -то момент, чтобы предотвратить появление сообщения - я недостаточно хорошо знаю Кохана, чтобы знать, можете ли вы использовать другой файл конфигурации при вызове из CLI.

Может просто отказаться error_reporting() В вашем конкретном контроллере справляется, хотя он немного взломан.

Другие советы

В качестве общей политики я бы посоветовал не отказывать в уровнях отчетности об ошибках, чтобы ошибки ушли.

Проблема в том, что, как говорит Пекка, $_SERVER['HTTP_HOST'] не определено в режиме CLI и Url Класс нуждается в этом при генерации абсолютных URL -адресов. Это может произойти в нескольких обстоятельствах, например, при вызове URL::site с $protocol установить или при использовании Request::redirect(), или при генерации RSS -канала с помощью Feed вспомогательный

Что вам нужно сделать, так это выяснить, где в вашем контроллере Croned вы пытаетесь генерировать абсолютный URL, а затем решить, нужно ли вам быть. Если вам это не нужно, удалите код оскорбления, и он должен работать нормально. если ты делать, Тогда просто отключение ошибок вам не поможет. Вместо этого добавьте это в свой bootstrap.php файл:

if ( ! isset($_SERVER['HTTP_HOST'])
{
    $_SERVER['HTTP_HOST'] = '<your-domain-here>';
}

Вам также необходимо убедиться, что вы явно передаете желаемый протокол (предположительно «http»), чтобы URL::base а не просто проходить TRUE. Анкет В противном случае он будет использовать текущий протокол, который будет cli://.

Другое решение - установить команду Cron таким образом:

wget -timeout = 99999 -o/dev/null -q http: // localhost/kohana/url/и/some/segment/ore/ways

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top