2012-02-17 12 views

उत्तर

9

यह एक कस्टम त्रुटि हैंडलर का उपयोग कर घातक त्रुटियों को संभालने के लिए संभव नहीं है।

सबसे अच्छा समाधान आपके php.ini में त्रुटि लॉगिंग (उदा। Syslog) को सक्षम करना और फिर असामान्य syslog प्रविष्टियों के बारे में नियमित ईमेल प्राप्त करने के लिए लॉगचेक/लॉगसेंट्री जैसे टूल का उपयोग करना है।
syslog PHP के बजाय फ़ाइल में त्रुटियों को लॉग भी कर सकते हैं - बस php.ini के त्रुटि लॉगिंग विकल्पों पर नज़र डालें।

log_errors = On 
error_log = syslog 
error_log = /path/to/some/folder/phperrors.log 

जाहिर है आप केवल error_log लाइनों में से एक का उपयोग करना चाहते।

class Base 
{ 
    public function __call($name) 
    { 
     MyLog::logError(...); 
     trigger_error("Function ".get_class($this)."::$name doesn't exist", 
      E_USER_ERROR); 
    } 
} 

प्रयास Base से व्युत्पन्न वर्ग के गैर मौजूदा तरीकों को लागू करने की अंततः Base::__call() द्वारा नियंत्रित किया जाएगा:

+0

मैं php.ini में त्रुटि लॉग कैसे सक्षम कर सकता हूं? – Hamidreza

+0

आप register_shutdown_function() –

+0

@ सेबस्टियन ग्रिग्नोली के साथ घातक त्रुटि को संभालने में सक्षम होना चाहिए: उस फ़ंक्शन में कोई त्रुटि होने पर यह पता लगाने का कोई साफ तरीका नहीं है। – ThiefMaster

0

कुछ की तरह:

if(!method_exists($obj, 'method')){ 

    $db->log('What you want to log'); //log in your DB 
    error_log('message');//Write to php's error log 

} 
+0

मैं अपने त्रुटि लेकिन इसके बाद के संस्करण की तरह कुछ त्रुटि से निपटने के लिए एक त्रुटि हैंडलर है, मैं संभाल नहीं कर सका उन्हें या लॉग इन करें। – Hamidreza

+0

उह, मुझे पूरा यकीन है कि वह एक सामान्य समाधान चाहता है। – ThiefMaster

+0

मुझे नहीं पता कि यह त्रुटि कहां होती है। मुझे सभी प्रकार की त्रुटि लॉग इन करने की आवश्यकता है – Hamidreza

1

आप अपने सभी आधार कक्षाएं एक सुपर वर्ग method overloading उपयोग के हैं हो सकता था। तदनुसार, स्थिर तरीकों के लिए, __callStatic() (PHP 5.3 के रूप में) है।

6

आपके कार्य से निपटने का एक तरीका है और वास्तव में आप FATAL त्रुटियों पर एक कस्टम त्रुटि हैंडलर सेट कर सकते हैं।

आप इसे इस तरह से कर सकते हैं:

ini_set('error_reporting', E_ERROR); 
register_shutdown_function("fatal_handler"); 
function fatal_handler() { 
    $error = error_get_last(); 
    //Do whatever you want with this error, for example: 
    YourDBApplicationLayer::writeFatal($error); 
} 
0

अब अपने संभव PHP7 में

try { 

    ggggg(); // <---- make fatal error 

}catch(Error $e){ 

    var_dump($e); 

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