3

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

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的来源

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

我将如何解决这个问题并让它工作(希望没有破解核心文件)。

还是我做错了 CRON?

更新

Pekka 提供了一个很好的答案,但是我想避免更改核心文件(尽管我会作为最后的手段)。

Kohana 3 似乎确实支持 CLI,因为有一个 static property $is_cli

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

4

3 回答 3

3

好像你E_STRICT打开了通知,Kohana 的错误处理捕捉到了它。E_STRICT会抱怨未定义的索引。该索引确实是未定义的,因为通过 CLI 调用 PHP 脚本时没有 HTTP_HOST。

尽管如此,您的脚本仍有可能运行良好。您必须error_reporting在某些时候拒绝以防止消息显示 - 我不太了解 Kohana,无法知道从 CLI 调用时是否可以使用不同的配置文件。

也许只是在您的特定控制器中关闭error_reporting()它就可以了,尽管它有点笨拙。

于 2010-03-18T23:52:58.550 回答
2

作为一般政策,我建议不要仅仅降低错误报告级别以使错误消失。

问题在于,正如 Pekka 所说,$_SERVER['HTTP_HOST']它没有在 CLI 模式下定义,并且Url该类在生成绝对 URL 时需要它。这可能在很多情况下发生,例如在URL::site使用$protocolset 调用时,或者在使用 时Request::redirect(),或者在使用帮助程序生成 RSS 提要时Feed

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

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

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

于 2010-04-16T13:20:14.020 回答
1

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

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

于 2010-09-16T07:27:02.037 回答