2009-11-22 15 views
10

Evrensel olarak php'ye herhangi bir ölümcül hata durumunda belirli bir sayfaya yönlendirmesini söylemek için bir yol var mı?Tüm hataları yakalayıp php ile sayfaya yönlendiriliyor

Çok sayıda farklı dosya içeren bir sitem var ve sorunları ((yine de onları günlüğe kaydederken) gizlemek ve hatanın ne olduğu veya hangi sayfada olduklarına bakılmaksızın kullanıcıyı aynı hata sayfasına göndermek istiyorum.

Sadece hataları görmek istemediğim argümanı hatırlıyorum gibi görünüyor ve sayfalar her 23 veya 51 sayfanın her birinde hataya neden olan robotlar tarafından sürekli olarak düzenleniyor ve güncelleştiriliyor.

Belki de php.ini dosyasını veya htaccess'i de kapsayabilecek bir şey arıyorum.

+0

Sonunda çalıştıktan sonra çözümümümü buraya gönderdim: http : //stackoverflow.com/a/19263800/1993494 – relipse

cevap

5

Sen Apache varsayılan 500 hata sayfası değiştirebilir 'ErrorDocument' yönergesine sahip:

ErrorDocument 500 /500.html 

Bu, 500 Dahili Sunucu hatasını 500.html'ye yönlendirir. Burada bir PHP sayfası kullanabilir ve yönlendiren sayfayı postalayabilirsiniz.

Hataları yakalamak için bunları bir error.log dosyasına kaydedebilirsiniz. php.ini dosyasındaki aşağıdaki iki direktifleri kullanın:

error_log = /var/log/httpd/error_php 
log_errors = On 

Apache yeniden unutmayın.

display_errors=Off 
log_errors=On 
error_log=whatever/path 

register_shutdown_function('errorHandler'); 
function errorHandler() { 
    $err = error_get_last(); 
    if($err) 
    include "error_page.php"; // your custom error page 
} 

koy (set_error_handler aksine, bu da ölü var yakalar) bir hata işleyicisi yazın:

+4

Bu, PHP hataları için işe yaramıyor. – Cybot

9

set_error_handler bakınız:

set_error_handler - ayarlar bir kullanıcı tanımlı hata işleyicisi işlevi

Rudimenter örnek:

<?php 

function errorHandler($n, $m, $f, $l) { 
    header('Location: http://example.com/error.php'); 
} 

set_error_handler('errorHandler'); 
... 
?> 
5

Birincisi, hata mesajlarını önlemek için ve günlük kaydını etkinleştirmek için php.ini değiştirmek bir dosyada kodu girin ve php'yi her requrest'e dahil etmesini söyleyin (bkz. auto_prepend_file @http://php.net/manual/en/ini.core.php)

+0

Ref: http://stackoverflow.com/questions/2171055/register-shutdown-function-registered-function-cannot-include-files-if-terminat Sözdizimi ayrıştırma hatasıyla karşılaştığınızda bu kod çalışmaz. Ekleme, komut dosyanızın sessiz kalmasını sağlayarak herhangi bir iz bırakmayacaktı. Eğer bu konuda birileri varsa, ben hepim kulaklarım. –

+0

Bu aslında benim için çalışan cevaplara biraz yakın. http://stackoverflow.com/a/19263800/1993494 – relipse

İlgili konular