मैं एक चेतावनी को आज़माना / पकड़ना चाहता था, लेकिन साथ ही साथ सामान्य चेतावनी / त्रुटि लॉगिंग (जैसे /var/log/apache2/error.log
) रखता हूँ ; जिसके लिए हैंडलर को वापस लौटना होगाfalse
। हालांकि, "नया फेंक ..." बयान मूल रूप से निष्पादन को बाधित करता है, एक तो "रैप इन फंक्शन" ट्रिक करना है, इस पर भी चर्चा की:
क्या php में अपवाद को फेंकने का एक स्थिर तरीका है
या, संक्षेप में:
function throwErrorException($errstr = null,$code = null, $errno = null, $errfile = null, $errline = null) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) {
return false && throwErrorException($errstr, 0, $errno, $errfile, $errline);
# error_log("AAA"); # will never run after throw
/* Do execute PHP internal error handler */
# return false; # will never run after throw
}
...
set_error_handler('warning_handler', E_WARNING);
...
try {
mkdir($path, 0777, true);
} catch (Exception $e) {
echo $e->getMessage();
// ...
}
संपादित करें: करीब निरीक्षण के बाद, यह पता चलता है कि यह काम नहीं करता है: " return false && throwErrorException ...
", मूल रूप से, अपवाद को फेंकना नहीं है, और बस त्रुटि लॉग में लॉग इन करें; " false &&
" भाग को, जैसा कि " " हटा दिया जाता है return throwErrorException ...
, अपवाद फेंकने वाले कार्य को बना देगा, लेकिन फिर error_log में लॉग इन नहीं करेगा ... मैं अभी भी इसे पोस्ट करूंगा, हालांकि, जैसा कि मैंने इस व्यवहार को कहीं और नहीं देखा है।