Pergunta

Eu configurei um cron para ligar para um URL em Kohana 3.

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

Parece acessar o URL bem.

No entanto, recebi esse erro (envie de volta em um e -mail que meu host envia por cron)

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

Fonte de url.php

Que está em um arquivo do sistema Kohana. Isso ocorre porque o trabalho do Cron não está enviando cabeçalhos HTTP?

Como eu corrigiria isso e fazia com que funcione (espero que sem hackear os arquivos principais).

Ou estou fazendo o cron errado?

Atualizar

Pekka forneceu a boa resposta, no entanto, gostaria de evitar alterar os arquivos principais (embora eu como último recurso).

Parece Kohana 3 faz tem suporte para CLI, pois há uma propriedade estática $is_cli.

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

Foi útil?

Solução

Parece que você tem E_STRICT A notificação foi ativada, e o tratamento de erros de Kohana pega isso. E_STRICT vai reclamar de índices indefinidos. O índice é realmente indefinido porque não há http_host em um script PHP quando chamado através da CLI.

Provavelmente, seu script está funcionando bem, apesar disso. Você teria que recusar error_reporting Em algum momento para impedir que a mensagem apareça - não conheço Kohana o suficiente para saber se você pode usar um arquivo de configuração diferente quando chamado da CLI.

Talvez apenas recusando o error_reporting() No seu controlador específico faz o truque, embora seja um pouco hacky.

Outras dicas

Como política geral, recomendo que apenas desative os níveis de relatórios de erros para que erros desapareçam.

O problema é que, como Pekka diz, $_SERVER['HTTP_HOST'] não é definido no modo CLI e no Url A classe precisa disso ao gerar URLs absolutos. Isso pode acontecer em algumas circunstâncias, por exemplo, ao ligar URL::site com $protocol definir, ou quando usar Request::redirect(), ou ao gerar um feed RSS usando o Feed ajudante.

O que você precisa fazer é descobrir onde, no seu controlador em cronometra, você está tentando gerar um URL absoluto e depois decidir se precisa ser. Se você não precisar, remova o código ofensivo e ele deve funcionar bem. Se você Faz, então apenas desativar os erros não o ajudará. Em vez disso, adicione isso ao seu bootstrap.php Arquivo:

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

Você também precisar URL::base Em vez de apenas passar TRUE. Caso contrário, ele usará o protocolo atual que será cli://.

Outra solução é definir o comando cron como este:

WGET -Tem -Timeout = 99999 -o/dev/null -q http: // localhost/kohana/url/e/algum/segmento/ou/qualquer coisa

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top