Php 帮助使用Kohana 3和CRON
我已经设置了一个CRON来调用Kohana3中的URLPhp 帮助使用Kohana 3和CRON,php,cron,kohana,kohana-3,Php,Cron,Kohana,Kohana 3,我已经设置了一个CRON来调用Kohana3中的URL php /home/user/public_html/index.php my/route/in/bootstrap.php 它似乎可以很好地访问URL 但是,我收到了此错误(通过主机通过CRON发送的电子邮件发回) 它位于Kohana系统文件中。这是因为CRON作业没有发送HTTP头吗 我将如何修复这个问题并使其正常工作(希望不破坏核心文件) 还是我做错了克朗 更新 Pekka提供了一个解决方案,但是我希望避免更改核心文件(尽管我会作
php /home/user/public_html/index.php my/route/in/bootstrap.php
它似乎可以很好地访问URL
但是,我收到了此错误(通过主机通过CRON发送的电子邮件发回)
它位于Kohana系统文件中。这是因为CRON作业没有发送HTTP头吗
我将如何修复这个问题并使其正常工作(希望不破坏核心文件)
还是我做错了克朗
更新
Pekka提供了一个解决方案,但是我希望避免更改核心文件(尽管我会作为最后手段)
Kohana 3似乎确实支持CLI,因为有一个静态属性$is_CLI
您似乎已经打开了
E_STRICT
通知,Kohana的错误处理捕捉到了这一点E_STRICT
会抱怨未定义的索引。该索引实际上是未定义的,因为当通过CLI调用时,PHP脚本中没有HTTP_主机
尽管如此,您的脚本仍有可能运行良好。您必须在某个时候关闭错误报告
,以防止消息显示-我不太了解Kohana,不知道从CLI调用时是否可以使用其他配置文件
也许只需关闭特定控制器中的
错误报告()
就可以实现这一点,尽管这有点麻烦。作为一般策略,我建议不要只关闭错误报告级别以消除错误
问题是,正如Pekka所说,$\u SERVER['HTTP\u HOST']
没有在CLI模式下定义,Url
类在生成绝对Url时需要这样做。在很多情况下都会发生这种情况,例如,当使用$protocol
集调用URL::site
时,或者当使用Request::redirect()
时,或者当使用提要
助手生成RSS提要时
您需要做的是确定您试图在CRONed控制器中生成绝对URL的位置,然后决定是否需要。如果您不需要它,那么删除有问题的代码,它就会正常运行。如果你这样做了,那么仅仅关闭错误对你没有帮助。相反,将其添加到bootstrap.php
文件中:
if ( ! isset($_SERVER['HTTP_HOST'])
{
$_SERVER['HTTP_HOST'] = '<your-domain-here>';
}
if(!isset($\u服务器['HTTP\u主机])
{
$\u服务器['HTTP\U主机']='';
}
您还需要确保将所需的协议(可能是“http”)显式传递到
URL::base
,而不是只传递TRUE
。否则,它将使用当前协议,即cli://
,另一个解决方案是设置cron命令,如下所示:
wget--timeout=99999-O/dev/null-q这很奇怪,我不得不改变它,因为它似乎支持CLI(具有Kohana类的静态属性
$is_CLI
)我也将在Kohana论坛上发帖。非常感谢您的回答。@alex这可能只是一个疏忽。E\u STRICT
不应该在生产环境中触发。(当然,更干净的方法是首先检查HTTP\u主机。)事实上,我可以关闭Kohana配置中的错误。我只是想能够在不关闭错误的情况下从这里测试我的CRON。我想我可以这样做。谢谢Pekka。@alex,不客气。如果你可以影响引导,你可以根据你是否在使用php_sapi_name的CRON作业中运行来打开/关闭错误:我想如果我这样做了不过,我无法在PHP_SAPI
中测试cli
,这意味着它可以从外部访问(除非我还检查了主机IP)。
if ( ! isset($_SERVER['HTTP_HOST'])
{
$_SERVER['HTTP_HOST'] = '<your-domain-here>';
}