Özel hata işleyicisi ayarlama dramatik betik çalıştırma zamanı artırır

4 Cevap php

Bir e-ticaret ödeme - sayfa - çalışmasını engelledi ve bana para mal geçmişte bazı hatalar olmuştur Ben üretimde bir komut dosyası var. Ben bu yüzden bu kadar çalıştı hataları haberdar almak istedim:

<?php
function mailErrorHandler($errno, $errstr)
  {
  echo "<!--PHP ERROR:";
  echo "---[$errno] $errstr ---";
  echo "-->";
  error_log("Error: [$errno] $errstr",1,
  "myemail@myserver.com","From: me@workserver.com");
  }

set_error_handler("mailErrorHandler",E_ALL);

echo 1-thisisnotanumber;

?>

O kendi komut olduğu gibi-onu kullandığınız zaman, çalışır ve hızlı bir şekilde yürütür. 1 saniye

4 Cevap

Eğer trafik önemli miktarda var ve hataları bir LOT atma iseniz günlüğüne yazılırken disk GÇ önemli miktarda neden olabilir. Bu bahsediyoruz ölçüde uygulamayı yavaşlatabilir.

Belki ne atıyorlar yerine Bildirimi "istisna" bir demet hataları değil, ama. Onları (PHP çoğu sürümlerinde varsayılan) göstermek değil belirledik ve bunları bir tekne yük alıyorsanız, sizin hata işleyicisi yüzlerce ve yüzlerce kez çalışıyor olabilir. Işleyici çalıştırıldığında her zaman, o, bir iz mutlaka geçerli kapsamı patlak, işleme her türlü yapmak için vardır, ve PHP 5.3 ile =& new veya çalıştığınız çünkü hepsi oluyor eğer erişim tanımsız dizi elemanları (veya herhangi bir diğer ortak haber), gecikmeler bu tür görmek için gidiyoruz.

Yani bu düzeltmek için, doktor akışı aracılığıyla çalıştırmak ve üretim üzerinde yukarıda belirtilen bildirimleri düzeltmek sonra, herhangi bir hata / duyurular / etc not almak, bildirimleri ekranda dönüm, test sunucusu üzerinde hata işleyicisi kapatarak reçete kutusu.

Bu yardımcı olur umarım!

Hmm. Eğer "bu kendi üzerinde kullanmak" derken, Apache üzerinden çağrılan ayrı bir sayfada demek, ya da komut satırında çalışan? E-posta kullanımı ile birlikte gecikme, bana bir DNS veya ağ sorunu ... şey çözümünde ya da bağlantı ve zamanlama dışarı değil şüpheli yapar.

Başka bir düşünce ... Xdebug kadar yangın ve bu çalışırken bir profil dökümü yapmak ve tüm zaman alıyor ne herhangi bir ışık tutuyor bakın.

error_log() çağrısından sonra exit() eklemeyi deneyin.

Eğer error_hander ile ilgili sorunlar varsa, başka bir çözüm bir dosyaya oturum olacaktır:

Set

log_errors = On
html_errors = Off
error_log = log

php.ini, sonra tüm hataları sunucu varsayılan error.log gireceksiniz.