帮助Kohana 3和CRON

时间:2010-03-18 23:45:44

标签: php cron kohana kohana-3

我已经设置了一个CRON来调用Kohana 3中的URL。

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

似乎可以正常访问网址。

但是,我收到了此错误(通过我的主机每个CRON发送的电子邮件发回)

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

Source of url.php

哪个是Kohana系统文件。这是因为CRON作业没有发送HTTP头吗?

我如何解决这个问题并让它发挥作用(希望不会破解核心文件)。

或者我做CRON错了吗?

更新

Pekka提供了good answer,但是我想避免更改核心文件(尽管我会作为最后的手段)。

似乎Kohana 3 支持CLI,因为有一个静态属性$is_cli

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

3 个答案:

答案 0 :(得分:3)

似乎您已启用E_STRICT通知,而Kohana的错误处理可以捕捉到这一点。 E_STRICT会抱怨未定义的索引。索引确实是未定义的,因为在通过CLI调用时,PHP脚本中没有HTTP_HOST。

尽管如此,你的脚本运行正常。您必须在某个时候拒绝error_reporting以防止消息显示 - 我不知道Kohana是否足以知道您是否可以在从CLI调用时使用其他配置文件。

也许只是拒绝你特定控制器中的error_reporting()就行了,虽然它有点笨拙。

答案 1 :(得分:2)

作为一般政策,我建议不要只是拒绝错误报告级别,以免错误消失。

问题在于,正如Pekka所说,$_SERVER['HTTP_HOST']未在CLI模式中定义,Url类在生成绝对URL时需要这样做。这可能在很多情况下发生,例如在设置URL::site时调用$protocol,或使用Request::redirect()时,或使用Feed帮助生成RSS源时。

您需要做的是找出您尝试生成绝对URL的CRONed控制器中的位置,然后确定是否需要。如果你不需要它,那么删除有问题的代码,它应该运行正常。如果你,那么只关闭错误对你没有帮助。而是将其添加到您的bootstrap.php文件中:

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

您还需要确保明确地将所需的协议(可能是“http”)传递给URL::base,而不是仅传递TRUE。否则,它将使用当前协议cli://

答案 2 :(得分:1)

另一个解决方案是像这样设置cron命令:

wget --timeout = 99999 -O / dev / null -q http://localhost/kohana/url/and/some/segment/or/whatever