我已经设置了一个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 ]
哪个是Kohana系统文件。这是因为CRON作业没有发送HTTP头吗?
我如何解决这个问题并让它发挥作用(希望不会破解核心文件)。
或者我做CRON错了吗?
Pekka提供了good answer,但是我想避免更改核心文件(尽管我会作为最后的手段)。
似乎Kohana 3 支持CLI,因为有一个静态属性$is_cli
。
http://github.com/kohana/core/blob/master/classes/kohana/core.php#L54
答案 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