PHP - kayıt hataları

5 Cevap php

Kullanıcı tarafından deneyimli hataları kaydetmek için en iyi yolu nedir?

Benim ilk düşünce veritabanında kayıt içine benzersiz bir sayı ve belki değişkenlerin bir dökümü ile hatayı kaydedilen bir işlevi yapmak oldu.

Daha iyi bir yaklaşım var mı? Ben bunun yerine bir metin dosyası günlüğünü kullanmalı mıyım?

5 Cevap

How about overriding the default PHP errorhandler? This site should give some basic information: http://www.php.net/manual/en/function.set-error-handler.php and the first comment on http://www.php.net/manual/en/function.set-exception-handler.php

Ayrıca veritabanı hataları, sizin gibi kod kullanmanızı sağlar özel fonksiyon belki bazı tür saklamak isteyebilirsiniz:

<?php
$objQueryResult = mysql_query("query here") or some_kind_of_function_here();
?>

You might want to store the recorded errors in a file, which is outside your public html root folder, to make sure people can't access it by accident. I would also assume, you'd want to store a complete stacktrace in such a file, because then you can actually debug the problem. When overriding the default errorhandlers, please note you don't forget to send a nice message to the user (and exit the script, when needed).

Ben saklanması tavsiye ederim:

  • $ _POST
  • $ _GET
  • A complete dump of debug_print_backtrace()
  • Muhtemelen bu tetikleyen SQL?

I would suggest you to use debug_print_backtrace() to make sure you get a summary of data. The debug_backtrace() function gives about the same information, but it can sometimes just give you too much information. The code you could use to catch backtraces:

<?php
ob_start();
debug_print_backtrace();
$trace = ob_get_contents();
ob_end_clean(); 
?>

Bu saklamak için, size çok fazla hata alamadım, aksi takdirde belki sqlite gibi bir şey kullanmak, bir düz metin çıkışını kullanabilir miyim? - Bu daha fazla sorun tetikleyebilir gibi SQL bağlantı hataları websunucu yaşıyorsanız sadece, hataları saklamak için aynı SQL bağlantısını kullanmayın.

Eh, en azından yerel sistem dosyaları metin yazarken çok DB hataları yakalamak için izin böylece, daha az hata eğilimli olmalı :)

Ben basit bir günlük dosyasına mevcut durumu iyi bir dökümü yazmayı tercih ediyorum. "Kendi" devlet (yani uygulamanın değişkenler ve nesneler) ek olarak, hangi ortam ve istek değişkenleri içerecek şekilde ilham almak için phpinfo() yaptığını düşünebilirsiniz.

ARMUT :: Giriş günlüğü bu tür için kullanışlıdır. örneğin

$logger->alert("your message");
$logger->warning("your message");
$logger->notice("your message");

vb

Sen bir dosyaya oturum açabilir ya da bir veritabanına, ben oldukça basit, bir PDO etkin sqlite uzantısı yazdı.

Bunlar çok istisna işleme koduna koymak için kullanışlıdır.

PEAR::Log

Kayıtlar: id, Logtime, kimlik, şiddeti 1-7 (yani "Alert"), ve mesaj.

Ben Icheb cevabı hepsini kapsar @ düşünüyorum.

Ben paylaşmak düşündüm bir proje, bu yıl yeni bir şey denedim.

Bir PHP tabanlı içerik toplama / dağıtım hizmeti, bazı sunucu üzerinde arka planda sessizce çalışır ve unutmak eğiliminde bir uygulama için, biz hataları fark emin kılan bir hata raporlama sistemi gereklidir.

Oluşan her hata kodunda belirtilen bir hata kimliği vardır:

$success = mysql_query(this_and_that);
if (!$success) log_error ("Failed Query: ".mysql_error(), "MYSQL_123");

Hatalar birlikte tam bir backtrace ve değişken dökümü ile, bir dosyaya kaydedilir, ancak daha da önemlisi yönetici posta yoluyla gönderilen olsun.

Postalar ile taşmasını önlemek için - hizmet iyi bir gününde onlarca binlerce kullanıcı var - hatası postalar her hata kodu için sadece once every x hours gönderdi olsun. Aynı kodu bir hata olduğunu zaman içinde iki kez oluştuğunda, hiçbir ek posta gönderilecektir. Bu hata her türlü kaydedilmiş olur, ama kullanıcılar yüzlerce veya binlerce olur bir şey olduğunda hata iletileri ile alamadım öldürdü demektir.

Bu uygulamak oldukça kolaydır; sanat hata kimliklerinin doğru oluyor. Siz, örneğin, her sisteminize aynı jenerik "MYSQL" Hata Kimliği MySQL Query başarısız verebilir. Çoğu durumda, bu da çok çok genel ve blok olacaktır. Her mySQL benzersiz bir hata kimliğini sorgulamak verirseniz, size posta ile akıyordu alabilirsiniz ve filtre etkisi gitti. Ama wWhen akıllıca gruplandırılmış, bu çok iyi bir kurulum olabilir.

From the usability point of view, the user should not Ever experience errors. Depending on the error you should make different strategies:

  • non catchable errors or difficult to catch from PHP, read the logs for each application
    • Apache
    • MySQL ve DB hataları, işlemler
    • "site güncelleniyor" ya da acil durumlar için hata kontrolörleri ile php hazırlamak.
  • PHP errors
    • Bu istisnalar yoluyla tespit edilmelidir
    • unutulmuş susturulması değil, sinek bunları düzeltmek için denemek gerekmez
    • bunları oturum ve onları tedavi
  • interface errors
    • Bir tavsiye: kullanıcı öneri veya hataları göndermek için izin verir

Ben bu does't kapak tüm, sadece başkalarına Zeyilname sürmüşlerdir olduğunu biliyorum.