PHP Hata işleme

4 Cevap

Bir ve bütün vaktinden teşekkür ederiz.

Benim şirket için sıfırdan yazdığı bir MVC çerçevenin iyileştirilmesi / verdiği sürecinde şu anda duyuyorum. Bu nispeten yeni olduğunu, bu yüzden kesinlikle eksik. Ben (her şeyi işleme hata erişimi olmalıdır) ve farklı türleri ve hatalar (Kullanıcı hataları ve Çerçeve hatalar) düzeyde işlemek gerekir çerçeve içine hata işleme dahil etmek gerekir. Benim soru bu yapmak için en iyi yolu ve en iyi mekanizma olan ne? Ben PHP 5, istisna yönetimi ve PEAR'ın farklı hata mekanizmasının biliyorum, ama ben bunların hiçbirini hiç kullanmamış. Ben etkili ve kullanımı kolay bir şey gerekiyor.

Bu benim kendi hata işleme oluşturmak veya önceden yapılmış bir şey kullanmak için daha iyi olurdu? Herhangi bir öneri, ipuçları, soruları kesinlikle karşıladı. Ben sonuçta ben sadece hata atmak ve ardından devam etmek için onunla olup olmadığını ne karar vermek gerekir, böylece bir şekilde PHP ile hata işleyicisi kayıt tatlılık düşünürdüm.

EDIT: Üzgünüm, ben oturum istediğini hataları ne tür hakkında daha ayrıntılı sağladı Nın gerekir. Kullanıcı ve Çerçeve: ben hataları 2 ana tip oturum için arıyorum.

Kullanıcı hataları için, ben vb kötü URL'ler (404), kısıtlı sayfalara yasadışı erişim, gibi şeyler yani ben sadece ana sayfasına yönlendirmek ya da sadece bir JavaScript iletişim kutusu yumurtlamak olabileceğini biliyorum, ama ben elegently idare edebilmek istiyorum onlar belirgin hale geldikçe bu hataları ve daha kullanıcı hataları ekleyin.

Çerçeve hataları ben veritabanına bağlanamıyor gibi şeyler demektir, birisi kaza bir veritabanı tablo veya silinmiş, vb şekilde bir dosya silinmiş

Ayrıca, gelişim ve canlı sunucu taşıma ilgilenir.

4 Cevap

I would ultimately think it sweetness to somehow register the error handler with PHP so that I would just need to throw the error and then decide what to do with it and whether to continue.

Sen set_error_handler() ve set_exception_handler() ile, tam olarak bunu yapabilirsiniz.

Orada hata işleme yapmak için hiçbir "tek doğru yol" olduğunu, ancak burada dikkat etmeniz gereken bazı şeyler vardır.

  • trigger_error () Sadece trigger_error () catchable değil, hemen geçerli yürütme dışarı onlar hem kaçış throw new Exception benzer.
  • Nasıl bir dev ortamında işlenen hatalar (ekranda gösterecek?) Bir üretim ortamında karşı (giriş ve e-postayla?) Istiyorsun
  • Siz aslında istisnalar içine hataları "dönüştürmek", ya da tam tersi yukarıdaki işlevleri kullanabilirsiniz
  • Tüm hata tipleri özel hata işleyicisi ile ele alınabilir Değil

İşte Ben genellikle bazı şeyler var:

  • Geliştirme ve üretim arasında geçiş yapmak için küresel bir yapılandırma ayarı veya bayrağını kullanın.
  • Eğer bir seçim varsa php hataları kullanmayın: Kendi hata handeling için istisnalar tercih. Eğer özel durumlar kullanmak olmayan bir kitaplığı kullanıyorsanız, hataları tespit etmek ve kendi istisna atar.
  • Okunması kolay bir şekilde istisnalar görüntüleyen bir üst seviye istisna alıcı kullanın. Eğer stratejik Bu try-catch bloğu koyarsanız, küresel bir istisna işleyici kayıt zorunda değilsiniz.
  • Her zaman error_handeling(E_ALL | E_STRICT) ile geliştirmek
  • PHP uyarıları ve set_error_handler() kullanarak bildirimleri ve durdurmak yürütme yakalayın. Bu bir sonucu olarak çok sağlam bir kodla, önceden bir sürü hata elimates.
  • Genel hata handeling kod hataları önlemek için, çok hafif olmalıdır. Genel hata işleyicileri ile uğraşırken bir risk yineleme için her zaman var.
  • Sistem üretim modunda ise, herhangi bir detay görüntü yok: hatayı oturum ve bir hata dosya veya hata bildirmek istiyorsanız kullanıcı başvurabilirsiniz benzersiz bir tanımlayıcı oluşturur.

Bir test veya bir kullanıcı bir garip bir kullanım durumunda devreye girdiğinde işler oldukça kolay istenmeyen mantık yolları içine basamakla, özellikle hataların tarihinin bir anlayışa sahip olan daha büyük bir sitede, çalışırken.

Ben ölümcül bir şeyin durumunda hata ve aksak yürütme günlüğü (ve hata kodu ile hata sayfasını öne doğru bakan bir tükürme) hem de yetenekli olan try catch blokları inşa etmek eğilimindedir, ya da yumuşak bir hata durumunda, devam eden üzerinde, ama benim hata günlükleri bunu belirtti. Seni büyütmek gibi sadece çok fazla nüans, aksi takdirde orada bulmak beri çoğunlukla, bir özel hata işleyicisi bina sonuna kadar.

Gelişimi sırasında, ben iz, mesaj, ve hattı ile bir konsola hataları ve diğer ilgili veri giriş Particletree en PHP profilcisini kullanmak. Bu sadece güzel olduğunu - verimliliği için konuşamıyor. Bu kodu kabartmak, ama benim iyi tanrım, nerede ve nasıl hatalar oluştu bir düz metin anlayışa sahip bir hayat kurtarıcı olabilir. Özellikle faydalı kimsenin businsess gibi sana istisnalar atmak olacaktır SOAP web hizmetleri gibi şeyler ile uğraşırken.

Ben de soyut bir hata ayıklama günlüğüne yararlı bulmak ve mümkün beri, insanlar daha önce söylediğimiz gibi üretime geçiş yaptığınızda, size soğuk internet havaya kirli çamaşır her türlü tükürerek değil, öyle ki küresel tutmak nispeten kolay bir sql veritabanı, ya da e-posta, ya da her türlü hata ayıklayıcı çıkışını değiştirmek.

Particletree en Profiler: http://particletree.com/features/php-quick-profiler/

Canlı gitmeden önce (ben Plesk kontrol panelini kullanın) php hatalarını izlemek için benim hata günlüklerini kontrol, geliştirme sırasında önemli aşamalarında tamamen benim projeyi test.

Bir proje, bir sınıf veya uygulamasında önemli aşamalarında, canlı olduğunda ben inşa sınıfını kullanarak bir hata ayıklama veya raporu gönderin. Hata ayıklama sınıfı çağrı / tetikleme zaman tanımlamak datetime kullanıcı ip, yönlendiren sayfa, tam url ve kısa bir not: Bu gibi önemli bilgi ile tanımlanmış bir e-posta adresine hata raporu gönderir.

Ben bir günlük dosyası yazmak için zorlamak için kullanabilirsiniz, ama ben son günlükleri her zaman erişmek için olduğu gibi dizin verimli değil 777 chmod olması gerekiyordu, ve gibi, bu güvensiz de bulundu. Hemen ben eylem bana sorun onları e-posta ile.