Обработка Ошибок

<?php // делаем нашу собственную обработку ошибок error_reporting(0); // пользовательская функция обработки ошибок function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) { // штамп времени для вхождения ошибки $dt = date("Y-m-d H:i:s (T)"); // определяем ассоциативный массив строки ошибки; // в реальности мы должны рассматривать только // 2,8,256,512 и 1024 $errortype = array ( 1 => "Error", 2 => "Warning!", 4 => "Parsing Error", 8 => "Notice", 16 => "Core Error", 32 => "Core Warning!", 64 => "Compile Error", 128 => "Compile Warning!", 256 => "User Error", 512 => "User Warning!", 1024=> "User Notice" ); // установить ошибки, для которых vartrace будет сохраняться $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); $err = "<errorentry>\n"; $err .= "\t<datetime>".$dt."</datetime>\n"; $err .= "\t<errornum>".$errno."</errornum>\n"; $err .= "\t<errortype>".$errortype[$errno]."</errortype>\n"; $err .= "\t<errormsg>".$errmsg."</errormsg>\n"; $err .= "\t<scriptname>".$filename."</scriptname>\n"; $err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n"; if (in_array($errno, $user_errors)) $err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n"; $err .= "</errorentry>\n\n"; // для тестирования // echo $err; // сохранить в error log и e-mail, если имеется критическая пользовательская ошибка error_log($err, 3, "/usr/local/php4/error.log"); if ($errno == E_USER_ERROR) mail("phpdev@example.com","Critical User Error",$err); } function distance ($vect1, $vect2) { if (!is_array($vect1) || !is_array($vect2)) { trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR); return NULL; } if (count($vect1) != count($vect2)) { trigger_error("Vectors need to be of the same size", E_USER_ERROR); return NULL; } for ($i=0; $i<count($vect1); $i++) { $c1 = $vect1[$i]; $c2 = $vect2[$i]; $d = 0.0; if (!is_numeric($c1)) { trigger_error("Coordinate $i in vector 1 is not a number, using zero", E_USER_WARNING); $c1 = 0.0; } if (!is_numeric($c2)) { trigger_error("Coordinate $i in vector 2 is not a number, using zero", E_USER_WARNING); $c2 = 0.0; } $d += $c2*$c2 - $c1*$c1; } return sqrt($d); } $old_error_handler = set_error_handler("userErrorHandler"); // неопределённая константа, генерируется предупреждение $t = I_AM_NOT_DEFINED; // определяем некоторые "векторы" $a = array(2,3,"foo"); $b = array(5.5, 4.3, -1.6); $c = array (1,-3); // генерируется пользовательская ошибка $t1 = distance($c,$b)."\n"; // генерируется ещё одна пользовательская ошибка $t2 = distance($b,"i am not an array")."\n"; // генерируется предупреждение $t3 = distance($a,$b)."\n"; ?>

Hosted by uCoz