array( 'critical' => "%s [%d] %s
\n". "A hiba a(z) %s állomány %d. sorában következett be
\n". "Kilépés...
\n", 'warning' => "%s [%d] %s, %s, %d
\n", 'notice' => "%s [%d] %s, %s, %d
\n", 'lf' => "
\n", 'assert' => "Hibás assert kiértékelés a %s állomámy %d sorában: %s
\n" ), 'plain' => array( 'critical' => "!! %s !! [%d] %s\n-----------------\n". "A hiba a(z) %s állomány %d. sorában következett be\n". "Kilépés...\n", 'warning' => "-- %s -- [%d] %s, %s, %d\n", 'notice' => " %s [%d] %s, %s, %d\n", 'lf' => "\n", 'assert' => " Hibás assert!! kiértékelés a %s állomámy %d sorában: %s
\n" ) ); // A hibajelentési szint beállítása //error_reporting (FATAL ); // függvényhívási verem értelmezése // @param $array : verem // @return $backarray : a verem olvasható formában function BackTrace( $array ) { $str = ""; $backarray = array(); for( $i = 0; $i < sizeof( $array ); $i++ ) { foreach( $array[$i] as $key => $val ) { if( $key == "function" ): $str .= " ".$key." '".$val."' "; elseif( $key == "file" ): $str .= "$val -- "; elseif( $key == "line" ): $str .= " ($val) "; elseif( $key == "class" ): $str .= " $val "; elseif( $key == "type" ): $str .= " [$val] "; endif; } $backarray[] = $str; $str = ""; } return $backarray; } function UniformBackTrace( $array, $ai_prev = false ) { $la_item = array(); $backarray = array(); if( !$ai_prev ) { for( $i = 0; $i < sizeof( $array ); $i++ ) { $la_item = array( "function" => "ismeretlen", "file" => "ismeretlen", "line" => "ismeretlen", "class" => "ismeretlen", "type" => "ismeretlen" ); foreach( $array[$i] as $key => $val ) { if( $key == "function" ): $la_item['function'] = $val; elseif( $key == "file" ): $la_item['file'] = $val; elseif( $key == "line" ): $la_item['line'] = $val; elseif( $key == "class" ): $la_item['class'] = $val; elseif( $key == "type" ): $la_item['type'] = $val; endif; } $backarray[] = $la_item; } } else { foreach( $array[ $ai_prev ] as $key => $val ) { if( $key == "function" ): $la_item['function'] = $val; elseif( $key == "file" ): $la_item['file'] = $val; elseif( $key == "line" ): $la_item['line'] = $val; elseif( $key == "class" ): $la_item['class'] = $val; elseif( $key == "type" ): $la_item['type'] = $val; endif; } $backarray = $la_item; } return $backarray; } // Hiba megjelenítő függvény. Nem konfigurálható, _minden_ hibát megjelenít. A rendszer hívja. function MyErrorHandler( $errnum, $text, $file, $row ) { global $temp; switch ($errnum) { case E_ERROR: print sprintf( $temp[ MSGTYPE ]['critical'], "FATÁLIS HIBA", $errnum, $text, $file, $row ); exit(1); break; case E_USER_ERROR: print sprintf( $temp[ MSGTYPE ]['critical'], "FELHASZNÁLÓI HIBA", $errnum, $text, $file, $row ); exit(1); break; case E_CORE_ERROR: print sprintf( $temp[ MSGTYPE ]['critical'], "RENDSZER HIBA", $errnum, $text, $file, $row ); exit(1); break; case E_COMPILE_ERROR: print sprintf( $temp[ MSGTYPE ]['critical'], "FORDÍTÁSI HIBA", $errnum, $text, $file, $row ); exit(1); break; case E_WARNING: print sprintf( $temp[ MSGTYPE ]['warning'], "FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_USER_WARNING: print sprintf( $temp[ MSGTYPE ]['warning'], "FELHASZNÁLÓI FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_CORE_WARNING: print sprintf( $temp[ MSGTYPE ]['warning'], "RENDSZER FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_COMPILE_WARNING: print sprintf( $temp[ MSGTYPE ]['warning'], "FORDÍTÁSI FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_NOTICE: print sprintf( $temp[ MSGTYPE ]['notice'], "MEGJEGYZÉS", $errnum, $text, $file, $row ); break; case E_USER_NOTICE: print sprintf( $temp[ MSGTYPE ]['notice'], "FELHASZNÁLÓI MEGJEGYZÉS", $errnum, $text, $file, $row ); break; default: print "Ismeretlen hibatípus: [$errnum] $text, $file, $row
\n"; break; } $bt = BackTrace( debug_backtrace() ); foreach( $bt as $f ) { print $f.$temp[ MSGTYPE ]['lf']; } // exit( 1 ); } // Hiba megjelenítő függvény. Nem konfigurálható, _minden_ hibát megjelenít. A rendszer hívja. function MyErrorFile( $errnum, $text, $file, $row ) { global $temp; $die = false; log_open( "i:/temp/php_error.txt" ); switch ($errnum) { case E_ERROR: $msg = sprintf( $temp[ MSGTYPE ]['critical'], "FATÁLIS HIBA", $errnum, $text, $file, $row ); $die = true; break; case E_USER_ERROR: $msg = sprintf( $temp[ MSGTYPE ]['critical'], "FELHASZNÁLÓI HIBA", $errnum, $text, $file, $row ); $die = true; break; case E_CORE_ERROR: $msg = sprintf( $temp[ MSGTYPE ]['critical'], "RENDSZER HIBA", $errnum, $text, $file, $row ); $die = true; break; case E_COMPILE_ERROR: $msg = sprintf( $temp[ MSGTYPE ]['critical'], "FORDÍTÁSI HIBA", $errnum, $text, $file, $row ); $die = true; break; case E_WARNING: $msg = sprintf( $temp[ MSGTYPE ]['warning'], "FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_USER_WARNING: $msg = sprintf( $temp[ MSGTYPE ]['warning'], "FELHASZNÁLÓI FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_CORE_WARNING: $msg = sprintf( $temp[ MSGTYPE ]['warning'], "RENDSZER FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_COMPILE_WARNING: $msg = sprintf( $temp[ MSGTYPE ]['warning'], "FORDÍTÁSI FIGYELMEZTETÉS", $errnum, $text, $file, $row ); break; case E_NOTICE: $msg = sprintf( $temp[ MSGTYPE ]['notice'], "MEGJEGYZÉS", $errnum, $text, $file, $row ); break; case E_USER_NOTICE: $msg = sprintf( $temp[ MSGTYPE ]['notice'], "FELHASZNÁLÓI MEGJEGYZÉS", $errnum, $text, $file, $row ); break; default: print "Ismeretlen hibatípus: [$errnum] $text, $file, $row
\n"; break; } $bt = BackTrace( debug_backtrace() ); foreach( $bt as $f ) { $msg .= $f.$temp[ MSGTYPE ]['lf']; } log_string( $msg ); if( $die ) exit( 1 ); } // függvény hívási verem megjelenítése function PrintBacktrace() { global $temp; $bt = BackTrace( debug_backtrace() ); foreach( $bt as $f ) { print $f.$temp[ MSGTYPE ]['lf']; } } function MyOutput( $buffer ) { global $dump; fwrite( $dump, $buffer ); } // idő kiírás function curtime() { $loctime = localtime(); return sprintf( "( %d:%d:%d )", $loctime[2], $loctime[1], $loctime[0] ); } class CDbg { function dump( $as_name, $am_var = null, $bt = true ) { print "
$as_name:
"; if( $bt === true ) printBacktrace(); if( $am_var != null ) { print "
";
			var_dump( $am_var );
		}
		print "


"; } function msg( $as_name, $am_var = null, $bt = true ) { print "
$as_name:
"; $bt = CDbg::bt( debug_backtrace(), 0 ); if( isset( $bt[0]) ) print $bt[0] . '
\n'; if( isset( $bt[1]) ) print $bt[1] . '
\n'; if( isset( $bt[2]) ) print $bt[2]; print "
"; if( $am_var != null ) { print "
";
			var_dump( $am_var );
			print "
"; } print "

"; } // A hibajelentési szint beállítása //error_reporting (FATAL ); // függvényhívási verem értelmezése // @param $array : verem // @return $backarray : a verem olvasható formában function bt( $array, $ai_prev = 1 ) { $str = ""; $backarray = array(); for( $i = $ai_prev; $i < sizeof( $array ); $i++ ) { foreach( $array[$i] as $key => $val ) { if( $key == "function" ): $str .= " ".$key." '".$val."' "; elseif( $key == "file" ): $str .= "$val -- "; elseif( $key == "line" ): $str .= " ($val) "; elseif( $key == "class" ): $str .= " $val "; elseif( $key == "type" ): $str .= " [$val] "; endif; } $backarray[] = $str; $str = ""; } return $backarray; } function fdump( $string, $var = null ) { ob_start(); $ts = CTimestamp::create(); print $string . $ts->toHU() ; if( $var != null ) { print "\n"; var_dump( $var ); } print "\n"; $res = ob_get_clean(); $file = fopen( SYSCONF_LOGPATH . "CDBG_dump", "a+" ); fwrite( $file, $res ); fclose( $file ); } function start() { ob_start(); } function store() { $buff = ob_get_clean(); $file = fopen( SYSCONF_LOGPATH . "CDBG_output", "w+" ); fwrite( $file, $buff ); fclose( $file ); } function mtime( $as_msg ) { $mtime = explode( " ", microtime() ); printf( "
%f : $as_msg

", $mtime[1] + $mtime[0] ); } } // loggolás egy állományba. Ha nincs nyitott logfile, semmi sem történik. $logfile = 0; // log file megnyitása function log_open( $fnev ) { global $logfile; $logfile = fopen( $fnev, "a" ); } // logfile lezárása function log_close( ) { global $logfile; fclose( $logfile ); $logfile = 0; } //sima üzenet loggolása, és a hely ahonnan hívták function log_string( $str ) { global $logfile; if( $logfile != 0 ) { fwrite( $logfile, "\n$str\n" ); $bt = BackTrace( debug_backtrace() ); fwrite( $logfile, "called from: ".$bt[ 1 ]."\n" ); // ez kéne a hívó függvény legyen } } // sql lekérdezés loggolása és a hely ahonnan hívtán ( a db_odbc->query előtti függvény ) function log_sql( $str ) { global $logfile; if( $logfile != 0 ) { fwrite( $logfile, "\n$str\n" ); $bt = BackTrace( debug_backtrace() ); fwrite( $logfile, "called from: ".$bt[ 2 ]."\n" ); // ez kéne a hívó függvény legyen } } // függvény verem loggolása function log_backtrace( ) { $btstr = "\n--- Backtrace:\n"; $bt = BackTrace( debug_backtrace() ); foreach( $bt as $f ) { $btstr .= "$f\n"; } $btstr .= "-------------\n\n"; log_string( $btstr ); } // végzetes hiba loggolása és a program szabályos befelyezése function log_fatal( $str ) { log_string( "Fatal: $str" ); log_backtrace( ); if( function_exists( "page_close" ) ) page_close( ); die( "Végzetes Hiba! Üzenet: $str" ); } // aktuális idő mikrosecundumban. function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec * 1000 ); } function tester( $ab_cond, $as_msg ) { global $temp; if( $ab_cond ) user_error( $as_msg, E_USER_ERROR ); } assert_options (ASSERT_ACTIVE, 0); assert_options (ASSERT_WARNING, 0); assert_options (ASSERT_QUIET_EVAL, 1); // Create a handler function function assert_handler ( $file, $line, $code ) { global $temp; printf( "Assert".$temp[ MSGTYPE ]['assert'], $file, $line, $code ); } // Set up the callback assert_options (ASSERT_CALLBACK, 'assert_handler'); class CErr { var $ms_type; var $ms_msg; var $mi_code; var $ma_occured; function &get_cerror() { static $lo_cerror; if( !isset( $lo_cerror ) ) $lo_cerror = new CErr(); return $lo_cerror; } function &error( $as_msg, $ai_code = 0, $ai_prev = 1 ) { $lr_cerror =& CErr::get_cerror(); $lr_cerror->ms_type = 'critical'; $lr_cerror->ms_msg = $as_msg; $lr_cerror->mi_code = $ai_code; $lr_cerror->ma_occured = UniformBackTrace( debug_backtrace(), $ai_prev ); return $lr_cerror; } function &warning( $as_msg, $ai_code = 0, $ai_prev = 1 ) { $lr_cerror =& CErr::get_cerror(); $lr_cerror->ms_type = 'warning'; $lr_cerror->ms_msg = $as_msg; $lr_cerror->mi_code = $ai_code; $lr_cerror->ma_occured = UniformBackTrace( debug_backtrace(), $ai_prev ); return $lr_cerror; } function display() { global $temp; printf( $temp[ MSGTYPE ][$this->ms_type], " HIBA ", $this->mi_code, $this->ms_msg, isset( $this->ma_occured["file"] ) ? $this->ma_occured["file"] : "ismeretlen", isset( $this->ma_occured["line"] ) ? $this->ma_occured["line"] : "ismeretlen" ); } function logit() { log_string( sprintf( $temp["plain"][$this->ms_type], " HIBA ", $this->mi_code, $this->ms_msg, $this->ma_occured["file"], $this->ma_occured["line"] ) ); } function is_error( &$ar_obj ) { if( get_class( $ar_obj ) == "cerr" ) return true; return false; } function qerror( $as_msg, $ai_code = 0, $ai_prev = 2 ) { $lo_e = CErr::error( $as_msg, $ai_code, $ai_prev + 1 ); $lo_e->display(); // CApp::finish(); } function qwarning( $as_msg, $ai_code = 0, $ai_prev = 2 ) { $lo_e = CErr::warning( $as_msg, $ai_code, $ai_prev + 1 ); $lo_e->display(); } function _display_message( $as_message, $ai_code, &$aa_backtrace ) { global $temp; print " {$temp[ MSGTYPE ]['lf']} ( $ai_code ) $as_message {$temp[ MSGTYPE ]['lf']}\n"; foreach( $aa_backtrace as $level ) { if( is_array( $level ) ) printf( "%s {$temp[ MSGTYPE ]['lf']}", implode( ",", $level ) ); else printf( "%s {$temp[ MSGTYPE ]['lf']}", $level ); } } function fatal( $as_msg = false, $ai_code = 0, $ai_prev = 1 ) { if( $as_msg === false ) { $as_msg = $this->ms_msg; $ai_code = $this->mi_code; $la_occured = $this->ma_occured; } else { $la_occured = CDbg::bt( debug_backtrace(), 0 ); } CErr::_display_message( "fatal: $as_msg", $ai_code, $la_occured ); exit(1); } } class CUserErr { var $ma_errors = array(); function &get_cerror() { static $lo_cerror; if( !isset( $lo_cerror ) ) $lo_cerror = new CUserErr(); return $lo_cerror; } function error( $as_msg ) { $lr_cerror =& CUserErr::get_cerror(); if( is_array( $as_msg ) ) { foreach( $as_msg as $key => $val ) $lr_cerror->ma_errors[] = $key . "_" . $val; } else { $lr_cerror->ma_errors[] = $as_msg; } } function blockdisplay( &$temp ) { $lr_cerror =& CUserErr::get_cerror(); foreach( $lr_cerror->ma_errors as $kulcs => $ertek ) { if( is_string( $kulcs ) ) { $temp->Parse( 'error_'.$kulcs .'_'. $ertek . 'B', 'error_'.$kulcs .'_'. $ertek, true ); } else { $temp->Parse( 'error_'.$ertek . 'B', 'error_'.$ertek, true ); } } } function display( &$temp) { $lr_cerror =& CUserErr::get_cerror(); // CDbg::dump( "errors", $lr_cerror->ma_errors ); foreach( $lr_cerror->ma_errors as $err ) { $temp->set_var( "{$err}1", "-->" ); $temp->set_var( "{$err}2", "