odbc_errormsg
odbc_execute
से त्रुटि संदेश की रिपोर्ट नहीं करता है जिस तरह से यह माना जाता है। यह केवल एक चेतावनी फेंकता है। तो मुझे error_get_last
के माध्यम से त्रुटि संदेश को पार्स करने के लिए एक हैक लिखने के लिए मजबूर किया गया है।error_get_last() और कस्टम त्रुटि हैंडलर
मैं set_error_handler
और error_get_last
रिटर्न NULL
उपयोग कर रहा हूँ जब तक कि मैं या तो:
मेरी त्रुटि हैंडलर अक्षम करें,
या इसे वापस
FALSE
बनाते हैं।
मुझे लगता है कि हम इस PHP के अंतर्निहित त्रुटि हैंडलर त्रुटि विवरण कहीं संग्रहीत करें ताकि वे बाद में पुनः प्राप्त किया जा सकता है की देखभाल करने के कारण है।
क्या मेरे कस्टम त्रुटि हैंडलर में ऐसे व्यवहार का अनुकरण करने का कोई तरीका है इसलिए error_get_last()
सामान्य रूप से उपयोग किया जा सकता है?
कृपया ध्यान दें कि मुझे किसी भी समय त्रुटि जानकारी पुनर्प्राप्त करने के कई तरीके पहले से ही जानते हैं। मेरा सवाल यह है कि error_get_last
उपयोग करने योग्य कैसे करें।
अद्यतन: मुझे लगता है कि मैं बेहतर कुछ कोड पोस्ट चाहते हैं।
पीएचपी error_get_last()
है, जो यह करने के लिए अनुमति देता है:
@fopen('xxx');
var_dump(error_get_last());
... और मिल इस:
array(4) {
["type"]=>
int(2)
["message"]=>
string(46) "fopen() expects at least 2 parameters, 1 given"
["file"]=>
string(69) "C:\Documents and Settings\ALVARO.GONZALEZ\Mis documentos\tmp\test.php"
["line"]=>
int(3)
}
यह टूट जाता है, तो आप अंतर्निहित त्रुटि हैंडलर की जगह:
function custom_error_handler($errno, $errstr, $errfile, $errline){
$ignore = ($errno & error_reporting()) == 0;
if(!$ignore){
echo "[Error happened: $errstr]\n";
}
return TRUE;
}
set_error_handler('custom_error_handler');
@fopen('xxx');
var_dump(error_get_last()); // NULL
यदि आप दोनों त्रुटि हैंडलर रखते हैं ...
function custom_error_handler($errno, $errstr, $errfile, $errline){
$ignore = ($errno & error_reporting()) == 0;
if(!$ignore){
echo "[Error happened: $errstr]\n";
}
return FALSE;
}
set_error_handler('custom_error_handler');
error_reporting(E_ALL);
echo $foo;
... आप साइड इफेक्ट मिलता है:
[Error happened: Undefined variable: foo]
Notice: Undefined variable: foo in C:\Documents and Settings\ALVARO.GONZALEZ\Mis documentos\tmp\test.php on line 15
Call Stack:
0.0004 329720 1. {main}() C:\Documents and Settings\ALVARO.GONZALEZ\Mis documentos\tmp\test.php:0
... बस के बजाय:
[Error happened: Undefined variable: foo]
मैं error_get_last
के साथ ठीक से इंटरफेस करने अपने कस्टम त्रुटि हैंडलर करना चाहते हैं। मुझे ठीक काम करने के लिए error_get_last
चाहिए।
क्या आप एक अलग (उपयोगकर्ता परिभाषित) फ़ंक्शन का उपयोग स्वीकार करेंगे? क्योंकि अगर आप, आप केवल पिछले त्रुटि एक वैश्विक वर में स्टोर सकता है, और एक समारोह है कि बस है '$ वैश्विक [ 'VARNAME'] वापसी है,' – DaveRandom
लौटने है 'स्वीकार्य नहीं FALSE'? यदि हां, तो क्यों? – Jon
इसके अलावा, आप [ '$ php_errormsg'] के लिए एक मूल्य बताए की कोशिश की है (http://uk.php.net/manual/en/reserved.variables.phperrormsg.php)? मुझे कोई जानकारी नहीं है कि यह कुछ भी हासिल करेगा (या यहां तक कि प्रभावित करेगा), लेकिन यह कोशिश करने लायक हो सकता है ... – DaveRandom