2010-05-05 11 views
5

में त्रुटियों को पार्स मैं एक त्रुटि लॉगिंग सेवा है कि मेरे सर्वर पर चल वेबसाइटों में एकीकृत किया जाएगा, कि मुझे त्रुटि बैचों ईमेल करेंगे, आदि लिख रहा हूँघातक लॉगिंग/PHP5

तो मैं खोजने की कोशिश कर रहा है अगर घातक और पार्स त्रुटियों को संभालने का कोई तरीका है, हालांकि PHP कोड (आउटपुट बफर, शट डाउन फ़ंक्शन) में इसे संभालने के लिए चाल का उपयोग नहीं करना है। मैं अपने PHP कोड के बाहर इसे संभालने के लिए कुछ सी कोड या कुछ लिखने में काफी खुश हूं। यदि संभव हो तो मैं एक रीडायरेक्ट जारी करना भी चाहूंगा (मेरी साइट आउटपुट बफरिंग का उपयोग करती है, इसलिए कोई हेडर नहीं भेजा जाना चाहिए)।

मुझे यकीन है कि यह एक PHP मॉड्यूल के साथ किया जा सकता है, लेकिन मैंने कभी नहीं लिखा है और यह नहीं पता कि कहां से शुरू करना है।

उत्तर

3

पकड़ PHP में घातक या पार्स त्रुटि को पकड़ने का कोई तरीका नहीं है। लेकिन ..

5.2 में, उन्होंने error_get_last() जोड़ा। आप इसे शट डाउन फ़ंक्शन के अंदर कॉल कर सकते हैं और लॉगिंग कर सकते हैं।

<?php 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
     && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) { 
     error_log("Oh noes, a fatal: " . var_export($err, true), 1, '[email protected]'); 
    } 
}); 

(। आप एक कॉलबैक का उपयोग करने के लिए यदि आप 5.3 पर नहीं हैं की आवश्यकता होगी और अनाम कार्यों ऐसा नहीं कर सकते)

: एक मेल बंद फायरिंग जब वहाँ एक गंभीर त्रुटि था के लिए एक अपरीक्षित 5.3 उदाहरण

दुर्भाग्यवश क्योंकि इसे शट डाउन फ़ंक्शन में संभाला जाता है, संभावना है कि हेडर पहले ही उत्सर्जित हो चुके हैं और आप उपयोगकर्ता को कुछ भी उपयोगी नहीं दे पाएंगे। यह शेष एप्लिकेशन पर निर्भर करता है, हालांकि, यह आपके लिए काम कर सकता है। इसे आज़माएं और पता लगाएं!

+0

मैंने इसे अपने प्रश्न में स्पष्ट कर दिया है कि मैं उन PHP चालों का उपयोग करके त्रुटियों को पकड़ने की कोशिश नहीं कर रहा हूं, मुझे बस उन्हें लॉग इन करने और उन्हें किसी भी तरह से संभालने की आवश्यकता है। एक PHP मॉड्यूल का उपयोग करना सबसे संभावित तरीका लगता है, लेकिन मुझे PHP मॉड्यूल में त्रुटि प्रबंधन के बारे में अधिक जानकारी नहीं मिल रही है। – PeterBelm

+0

मैंने यह भी अपने जवाब में स्पष्ट किया कि आप पकड़ नहीं सकते हैं, लेकिन आप लॉग कर सकते हैं। :) – Charles

+0

ने मेरे लिए काम किया - कोड सिंटैक्स भी गलत है –

1

डिफ़ॉल्ट रूप से सभी त्रुटियां वेब सर्वर त्रुटि लॉग में पास की जाती हैं लेकिन आप इसे अपनी फ़ाइल via error_log setting पर पथ निर्दिष्ट करके php.ini में बदल सकते हैं। तो क्या करना बाकी है कुछ अलग स्क्रिप्ट/ऐप लिखना/डेटा/ट्रंकेट लॉग फ़ाइल को हर दिन/जो कुछ भी क्रॉन जॉब के रूप में चलाने के लिए भेजना है।

+0

इस के साथ एकमात्र समस्या यह है कि मैं एक रीडायरेक्ट जारी नहीं कर पाऊंगा। मुझे लगता है कि एक PHP मॉड्यूल के साथ मैं इसे प्राप्त करने में सक्षम हो जाएगा। – PeterBelm

संबंधित मुद्दे