Kohana 3 ve CRON ile Yardım

3 Cevap php

Ben Kohana 3 bir URL aramak için bir CRON kurdum.

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

Bu URL ince erişmek gibi görünüyor.

Ancak, ben (benim ana CRON başına gönderir bir e-posta geri göndermek) bu hatayı aldık

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

Source of url.php

Hangi Kohana sistem dosyası bulunmaktadır. CRON iş HTTP başlıklarını gönderme değil çünkü bu?

Bunu nasıl düzeltebilirim ve (çekirdek dosyaları hack olmadan umarım) işe almak istiyorum.

Yoksa CRON yanlış yapıyorum?

Update

Pekka sağlanan good answer, ancak ben (ben son çare olarak olacak olsa) çekirdek dosyaları değişen önlemek istiyorum.

Bu statik bir özellik olduğu gibi, Kohana 3 does CLI desteği var gibi görünüyor $is_cli. Olur

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

3 Cevap

Eğer E_STRICT bildirim açık var gibi görünüyor, ve Kohana hatası işleme olduğunu yakalar. E_STRICT tanımsız indeksleri şikayet edecek. CLI ile çağrıldığında hiçbir HTTP_HOST bir PHP komut dosyası olduğundan endeksi gerçekten tanımsız.

Şansını komut buna rağmen iyi çalışıyor edilir. Sen gösterilmesini iletisini önlemek için bazı noktada error_reporting geri çevirmek olurdu - Ben CLI'den çağrıldığında farklı bir yapılandırma dosyasını kullanabilirsiniz olup olmadığını bilmek yeterince Kohana bilmiyorum.

Biraz hacky olsa belki sadece hile, özel denetleyicisi error_reporting() gelmez aşağı dönüyor.

Genel bir politika olarak, ben sadece hataları go away yapmak için hata raporlama seviyelerini aşağı çevirerek karşı tavsiye ediyorum.

Sorun Pekka dediği gibi, $_SERVER['HTTP_HOST'] CLI modunda tanımlanmış ve Url sınıf mutlak URL'leri oluştururken, bu ihtiyaçları değil, olmasıdır. Bu epeyce durumlarda olabilir, örneğin zaman URL::site $protocol set ile, ya Request::redirect() kullanırken arayarak, veya {kullanarak bir RSS beslemesi oluşturulurken [(5)]} yardımcı.

Ne yapmanız gereken CRONed denetleyicisi mutlak bir URL oluşturmak için çalışıyoruz nerede çalışmak, ve sonra olması gereken karar etmektir. Eğer ihtiyacınız yoksa, o zaman soruna kodunu kaldırmak ve ince çalışmalıdır. Eğer do, sonra sadece kapatarak varsa hataları size yardımcı olmayacaktır. Bunun yerine, bootstrap.php dosyasına ekleyin:

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

Ayrıca açıkça (muhtemelen 'http') URL::base ziyade sadece geçen daha istediğiniz protokolü geçmek emin olmak gerekir TRUE. Aksi takdirde olacak mevcut protokolünü kullanacaktır cli://.

Başka bir çözüm gibi cron komutu ayarlamak için:

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