【问题标题】:Help with Kohana 3 and a CRON帮助 Kohana 3 和 CRON
【发布时间】:2010-03-18 23:45:43
【问题描述】:

我已经设置了一个 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 ]

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

【问题讨论】:

    标签: php cron kohana kohana-3


    【解决方案1】:

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

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

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

    【讨论】:

    • 很奇怪我不得不改变它,因为它似乎它支持 CLI(具有 Kohana 类的静态属性 $is_cligithub.com/kohana/core/blob/master/classes/kohana/core.php#L54我也将在 Kohana 论坛上发帖。非常感谢您的回答。
    • @alex 这可能只是一个疏忽。 E_STRICT 在生产环境中根本不应该触发。 (当然,更简洁的方法是首先检查 HTTP_HOST。)
    • 其实我可以关闭 Kohana 配置中的错误。我只想能够在不关闭错误的情况下从这里测试我的 CRON。我想我只能这样做。谢谢佩卡。
    • @alex 不客气。如果您可以影响引导程序,则可以根据您是否使用 php_sapi_name 在 cron 作业中运行来打开/关闭错误:de.php.net/manual/en/function.php-sapi-name.php
    【解决方案2】:

    作为一般政策,我建议不要仅仅通过降低错误报告级别来消除错误。

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我想如果我这样做,那么我无法在PHP_SAPI 中测试cli,这意味着它可以被外部访问(除非我还检查主机IP)。
      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2011-10-05
      • 2011-10-16
      • 2020-03-26
      相关资源
      最近更新 更多