Witam, raczej skromny debuger,
proponuje ci go poszerzyc o debugbacktrace
<?php
function getFunctionName($n,$id){
if ($id=='args') {
$typ=$backtrace[$n][$id];
} else {
$wynik="";
for ($i=0;$i<count($backtrace);$i++){
//pominiecie tej funkcji
if (@$backtrace[$i][$id]!="getfunctionname"){
if ($id!='line'){
@$wynik.="[".$backtrace[$i][$id].":".basename($backtrace[$i]['file'],$backtrace[$i]['file']).":".$backtrace[$i]['line']."]:::"; } else
@$wynik.="[".basename($backtrace[$i]['file'],$backtrace[$i]['file']).":".$backtrace[$i]['line']."]:::"; }
}
return $wynik;
}
}
function getFunctionFilenameName($n){
$wynik="";
for ($i=0;$i<count($backtrace);$i++){
@$wynik=$wynik.$backtrace[$i]['file'].":";
}
return $wynik;
}
?>
a wykorzystanie mniej wiecej tak ,
pisalem na szybko ale powinienes zrozumiec w czym rzecz, jedynie co poprawic to dane debug zapisywac do np sql lite albo gdzies do pliku a nie do tego samego sql'a ( w tym przypadku mysql'a )
pozatym dodac wiecej obslugi bledow i powinna byc bardzo uzyteczna rzecz.
<?php
/** * query - wykonuje zapytanie do bazy danych */
function query($query,$conn){
}
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime; //wykonanie //domyslnie status na ok
$status_query=true;
if ($result==FALSE) {
$status_query=false;
//sprobuj ponownie
}
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
//wpisywanie do bazy wynikow
$nazwa_klasy=get_class($this);
$caller_func=getFunctionName(2,'function');
$class=getFunctionName(2,'args');
$filename=basename(getFunctionFilenameName
(0
),getFunctionFilenameName
(0
)); $line=getFunctionName(1,'line');
if ($status_query==true) {$opis_query="OK";} else {
$opis_query="ERROR";
}
if ($status_query==true) { //jesli za dlugie
if ($totaltime>MAX_QUERY_TIME) $opis_query="LONG";
}
//jezeli tylko dlugie query i ERRORY
if (($opis_query=="ERROR")||($opis_query=="LONG")){
$qu="INSERT INTO ".DB_NAME.".debug_query VALUES (0,'$nazwa_klasy','$caller_func','$totaltime','$filename','$line','$query','$opis_query','$session->idu',NOW(),'".$_SERVER["REMOTE_ADDR"]."','".$this->num_active_users ."');";
if ($status_query==true) {
return $result; } else {
die('Wystapil blad, zapytanie: .'.$query); }
}
?>
$session->idu akurat trzyma identyfikator zalogowanego uzytkownika
MAX_QUERY_TIME np 0.5 (0.5ms)
$this->num_active_users to ilosc aktywnych uzytkownikow
i przykladowy wpis z bledem to cos takiego
:
<RECORD>
<IDQUERY_DEBUG>28</IDQUERY_DEBUG>
<CLASS_NAME>MySQLDB</CLASS_NAME>
<FUNC_NAME>[getFunctionName:database.php:1500]:::[query:database.php:644]:::[GetNotaSerwiso
wa:nota_serwisowa.php:17]:::[GetNotaInfo:nota_serwisowa.php:12]:::[nota_serwis:no
ta_serwisowa.php:8]:::</FUNC_NAME>
<EXECUTION_TIME>0.00556898117065</EXECUTION_TIME>
<FILENAME>nota_serwisowa.php:</FILENAME>
<LINE_NUM>[database.php:1503]:::[database.php:644]:::[nota_serwisowa.php:17]:::[nota_serwi
sowa.php:12]:::[nota_serwisowa.php:8]:::</LINE_NUM>
<QUERY>SELECT * from noty_serwisowe WHERE IDNS='1' LIMIT 1<br><b> Unknown column 'IDNS' in 'where clause'</b></QUERY>
<STATUS>ERROR</STATUS>
<USER>1</USER>
<TIME>20051218T12:50:04000</TIME>
<IP>127.0.0.1</IP>
<USERS_ONLINE>1</USERS_ONLINE>
</RECORD>
a z wykonaniem zbyt dlugiego zapytania
<RECORD>
<IDQUERY_DEBUG>8</IDQUERY_DEBUG>
<CLASS_NAME>MySQLDB</CLASS_NAME>
<FUNC_NAME>[getFunctionName:database.php:1487]:::[query:session.php:1348]:::[sSearchZleceni
a:lista_zlecen_grupy.php:116]:::[include:index.php:301]:::</FUNC_NAME>
<EXECUTION_TIME>0.625414133072</EXECUTION_TIME>
<FILENAME>index.php:</FILENAME>
<LINE_NUM>[database.php:1490]:::[session.php:1348]:::[lista_zlecen_grupy.php:116]:::[index
.php:301]:::</LINE_NUM>
<QUERY>
SELECT SQL_CALC_FOUND_ROWS *,IF(IDZ_PARENT=0,zlecenia.IDZ,IDZ_PARENT) as IDZ2 ,unix_timestamp(D_IDK) as D_IDK ,ID_NS
FROM serwisy_centralne,
podzespoly_producent,
zlecenia,
zlecenia_grupy,
users,
podzespoly,
podzespoly_grupy,
podzespoly_grupy2,
kontrahenci LEFT JOIN noty_serwisowe on zlecenia.idz=noty_serwisowe.idz_conn
WHERE
zlecenia_grupy.IDU =users.IDU and
zlecenia.IDZG =zlecenia_grupy.IDZG and
kontrahenci.IDK =zlecenia_grupy.IDK and
podzespoly.IDP =zlecenia.IDP and
podzespoly.IDPG2 =podzespoly_grupy2.IDPG2
and podzespoly_grupy2.IDPG =podzespoly_grupy.IDPG and
podzespoly_producent.IDF =podzespoly.IDF and
serwisy_centralne.IDS =zlecenia.IDS
and lower(IDP_M) like lower("%%") and lower(S_SN) like lower("%%") and lower(S_IDK_F) like lower("%%") and lower(S_IDK_M) like lower("%%") and lower(S_IDK_DANE) like lower("%%") and lower(serwisy_centralne.IDS_NAZWA) like lower("%%") and zlecenia_grupy.idzg=1412 ORDER BY IDZ2 ASC,zlecenia.IDZ ASC LIMIT 0,1000;
</QUERY>
<STATUS>LONG</STATUS>
<USER>1</USER>
<TIME>20051217T18:16:00000</TIME>
<IP>127.0.0.1</IP>
<USERS_ONLINE>1</USERS_ONLINE>
</RECORD>
pozdrawiam