if(!class_exists('baza'))
{
/*
include_once("./classes/baza.php");
$baza=new baza;
$baza->PolaczDoBazy();
$baza->rozlaczbaze();
*/
/*
$_SESSION['baza']['operationtime'] - przechowuje czas wykonania funkcji w milisekundach
insert into user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)values('localhost','filtry',PASSWORD('filtry'),'','','');
insert into db(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Alter_priv)values('localhost','filtry','filtry','y','y','y','y','y','y','y');
flush privileges;
create database filtry CHARACTER SET UTF8;
*/
class baza
{
var $serwer;
var $login;
var $haslo;
var $baza;
var $port;
var $polaczenie;
var $pokazzapytania;
var $pokazbledy;
var $bladpolaczenia;
var $pokazzapytaniabezbledow;
var $logtype;
var $raport;
var $komunikatbladupolaczenia;
var $numerzdarzenia;
//----------------------------------------------------------------------------------------------------
public function baza($pathtoconfig,$pokazzapytania2=true,$pokazbledy2=true,$pokazzapytaniabezbledow2=true,$logtype)
{
$przed=microtime();
if(file_exists($pathtoconfig))
{
include_once($pathtoconfig);
$this->serwer=$serwer;
$this->login=$login;
$this->haslo=$haslo;
$this->baza=$baza;
$this->port=$port;
$this->pokazzapytania=($pokazzapytania && $pokazzapytania2)?true:false;
$this->pokazbledy=($pokazbledy && $pokazbledy2)?true:false;
$this->pokazzapytaniabezbledow=($pokazzapytaniabezbledow && $pokazzapytaniabezbledow2)?true:false;
$this->logtype=$logtype;//all, error, good
}
else
{
//echo("Błędna ścieżka do pliku konfiguracyjnego bazy. Class: baza; Function: baza ");
exit;
}
$_SESSION['baza']['operationtime']=microtime()-$przed;
}
//----------------------------------------------------------------------------------------------------
public function retpolaczenie()
{
return $this->polaczenie;
}
//----------------------------------------------------------------------------------------------------
public function PolaczDoBazy()
{
//polaczenie z baza
//zwraca 1 gdy wszystko ok
//zwraca -1 gdy nie udało się przyłączyć do serwer
//zwraca -2 gdy nie udało się wybrać bazy danych
$oldreporting=error_reporting(0);
$mysqli = new mysqli($this->serwer,$this->login,$this->haslo,$this->baza,$this->port);
if(!$mysqli->connect_errno)
{ //gdy udało się połączyć
$mysqli->query("SET NAMES utf8");
$this->polaczenie=$mysqli;
$ret=1;
}
else
$ret=-1;//błąd połączenia
error_reporting($oldreporting);
$this->bladpolaczenia=$ret;
//--------------------
$this->komunikatbladupolaczenia=$mysqli->connect_errno." - ".$mysqli->connect_error;
}
//--------------------------------------------------------
public function RozlaczBaze()
{
$this->polaczenie->close();
}
//----------------------------------------------------------------------------------------------------
public function showraport()
{
$rettext="";
if(!$this->polaczenie && $this->pokazbledy)
$rettext.="
Brak połączenia z bazą: ".$this->komunikatbladupolaczenia."
";
$rettext.="".$this->raport."
";
return $rettext;
}
//--------------------------------------------------------
public function pobierzdane($zapytanie,$sql=1,$err=1)
{
$this->gennrzdarzenia();
$przed=microtime();
if($this->polaczenie)
{
$rettext=$this->polaczenie->query($zapytanie);
if($rettext && $rettext->num_rows>0)
{
if($this->pokazzapytaniabezbledow)
$this->komunikat($zapytanie,$sql,$err);
$_SESSION['baza']['operationtime']=microtime()-$przed;
$this->savelog($zapytanie,$this->checkpoint(debug_backtrace()));
return $rettext;
}
$this->komunikat($zapytanie,$sql,$err);
$_SESSION['baza']['operationtime']=microtime()-$przed;
$this->savelog($zapytanie,$this->checkpoint(debug_backtrace()));
if($this->logtype=="all")
$this->syslog(debug_backtrace(),$zapytanie);
}
return 0;
}
//----------------------------------------------------------------------------------------------------
public function operacja($zapytanie,$sql=1,$err=1)
{
$this->gennrzdarzenia();
$rettext=false;
//tak mozna to zapisac do wywolania
//echo("Dodaje baner: ".$baza->operacja("insert into banery(link)values('costam');"));
$przed=microtime();
if($this->polaczenie)
{
if($this->polaczenie->query($zapytanie))
{
if($this->polaczenie->affected_rows>0)
{
if($this->pokazzapytaniabezbledow)
$this->komunikat($zapytanie,$sql,$err);
$_SESSION['baza']['operationtime']=microtime()-$przed;
$this->savelog($zapytanie,$this->checkpoint(debug_backtrace()));
$rettext=true;
}
elseif($this->error()=="")//jezeli nie ma bledu to tez zwracam true
{
if($this->pokazzapytaniabezbledow)
$this->komunikat($zapytanie,$sql,$err);
$_SESSION['baza']['operationtime']=microtime()-$przed;
$this->savelog($zapytanie,$this->checkpoint(debug_backtrace()));
$rettext=true;
}
else
{
if($this->pokazzapytaniabezbledow)
$this->komunikat($zapytanie,$sql,$err);
$_SESSION['baza']['operationtime']=microtime()-$przed;
$this->savelog($zapytanie,$this->checkpoint(debug_backtrace()));
$rettext=false;
}
}
else
{
$this->komunikat($zapytanie,$sql,$err);
$_SESSION['baza']['operationtime']=microtime()-$przed;
$this->savelog($zapytanie,$this->checkpoint(debug_backtrace()));
$rettext=false;
}
}
return $rettext;
}
//----------------------------------------------------------------------------------------------------
public function lastid()
{
$id="";
$przed=microtime();
if($this->polaczenie->affected_rows>0)
$id=$this->polaczenie->insert_id;
$_SESSION['baza']['operationtime']=microtime()-$przed;
return $id;
}
//----------------------------------------------------------------------------------------------------
public function install($nazwatablicy,$pola,$sql=1,$err=1,$primarykey="")
{
if($this->polaczenie)
{
$wynik=$this->polaczenie->query("describe $nazwatablicy");
if($wynik->num_rows<=0)
{
//jezeli nie ma to po prostu zalozyc
$regulkatworzaca="create table $nazwatablicy (";
foreach($pola as $i=>$val)
{
if($pola[$i][3]!="")$pola[$i][3]="default ".$pola[$i][3];
$regulkatworzaca.="$i ".$pola[$i][0]." ".$pola[$i][1]." ".$pola[$i][2]." ".$pola[$i][3]." ".$pola[$i][4].",";
}
$regulkatworzaca=substr($regulkatworzaca,0,-1);
if($primarykey!="")$regulkatworzaca.=",PRIMARY KEY ($primarykey)";
$regulkatworzaca.=")ENGINE=InnoDB DEFAULT CHARSET=utf8;";
if($this->polaczenie->query("$regulkatworzaca"))
{
$this->komunikat($regulkatworzaca,$sql,$err);
//echo("Tablica zalożona");
}
else
$this->komunikat($regulkatworzaca,$sql,$err);
}
else
{
$wynik=$this->polaczenie->query("describe $nazwatablicy;");
if($wynik->num_rows>0)
{
//pobieram pola z tablicy
while ($wierszwyniku = $wynik->fetch_assoc())
{
$pole=$wierszwyniku['Field'];
$typ=$wierszwyniku['Type'];
$puste=$wierszwyniku['Null'];
$key=$wierszwyniku['Key'];
$default=$wierszwyniku['Default'];
$extra=$wierszwyniku['Extra'];
if($puste=='NO')$puste='not null';else $puste='';
if($key=='PRI')$key='primary key';else $key='';
if($default=='NULL')$default='';
if($default!="" && $default!="CURRENT_TIMESTAMP" && !is_numeric($default))$default="'$default'";
$tablefields[$pole][0]=$typ;
$tablefields[$pole][1]=$puste;
$tablefields[$pole][2]=$key;
$tablefields[$pole][3]=$default;
$tablefields[$pole][4]=$extra;
$tablefields[$pole][5]=$pole;
//if($tablefields[$pole][1]=="not null")$tablefields[$pole][1]="";
}
//--------------------
foreach($pola as $i=>$val)
{
//if($pola[$i][1]=="")$pola[$i][1]="not null";
//--------------------
if($i!="" && $tablefields[$i][5]=="")
{
if($pola[$i][3]!="")$pola[$i][3]="default ".$pola[$i][3];
$regulkatworzaca=$pola[$i][5]." ".$pola[$i][0]." ".$pola[$i][1]." ".$pola[$i][2]." ".$pola[$i][3]." ".$pola[$i][4];
if($this->polaczenie->query("alter table $nazwatablicy add $regulkatworzaca;"))
{
$this->komunikat("alter table $nazwatablicy add $regulkatworzaca;",$sql,$err);
//echo("nowa kolumna została dodana ");
}
else
$this->komunikat("alter table $nazwatablicy add $regulkatworzaca;",$sql,$err);
}
else
{
$tablefields[$i][6]=true;
if($pola[$i][1]=="null")$pola[$i][1]="";
if($tablefields[$i][3]=="'0000-00-00 00:00:00'")$tablefields[$i][3]="0";
if($tablefields[$i][0]!=$pola[$i][0] || $tablefields[$i][1]!=$pola[$i][1] || $tablefields[$i][2]!=$pola[$i][2] || $tablefields[$i][3]!=$pola[$i][3] || $tablefields[$i][4]!=$pola[$i][4])
{
//echo("".$tablefields[$i][0]."!=".$pola[$i][0]." || ".$tablefields[$i][1]."!=".$pola[$i][1]." || ".$tablefields[$i][2]."!=".$pola[$i][2]." || ".$tablefields[$i][3]."!=".$pola[$i][3]." || ".$tablefields[$i][4]."!=".$pola[$i][4]."
");
$this->komunikat($tablefields[$i][0]."!=".$pola[$i][0]." || ".$tablefields[$i][1]."!=".$pola[$i][1]." || ".$tablefields[$i][2]."!=".$pola[$i][2]." || ".$tablefields[$i][3]."!=".$pola[$i][3]." || ".$tablefields[$i][4]."!=".$pola[$i][4],$sql,$err);
if($pola[$i][3]!="")$pola[$i][3]="default ".$pola[$i][3];
$regulkatworzaca=$pola[$i][5]." ".$pola[$i][0]." ".$pola[$i][1]." ".$pola[$i][2]." ".$pola[$i][3]." ".$pola[$i][4];
if($this->polaczenie->query("alter table $nazwatablicy change ".$tablefields[$i][5]." $regulkatworzaca;"))
{
$this->komunikat("alter table $nazwatablicy change ".$tablefields[$i][5]." $regulkatworzaca;",$sql,$err);
//echo("Kolumna zostala poprawiona");
}
else
$this->komunikat("alter table $nazwatablicy change ".$tablefields[$i][5]." $regulkatworzaca;",$sql,$err);
}
}
}
//--------------------
foreach($tablefields as $key=>$val)
{
if($val[6]!=true)
{
//usuwam pole
$regulkatworzaca="alter table $nazwatablicy drop $key;";
if($this->polaczenie->query($regulkatworzaca))
$this->komunikat("Kolumna została usunięta $key $nazwatablicy ",$sql,$err);
else
$this->komunikat($regulkatworzaca,$sql,$err);
}
}
}
}
}
/*else
echo("Brak połączenia z bazą danych ");*/
}
//----------------------------------------------------------------------------------------------------
public function error()
{
return $this->polaczenie->connect_error;
}
//----------------------------------------------------------------------------------------------------
public function iloscwynikow()
{
return $this->polaczenie->affected_rows;
}
//--------------------------------------------------------
private function komunikat($zapytanie,$sql,$err)
{
//komunikat uzywany do wyswietlania bledow przy operacjach z baza oraz logowania do pliku
//przygotowuje dane
$zapytanie=str_replace(",",", ",$zapytanie);
//zabezpieczam zapytanie przed wyswietleniem pozbywam sie <>
$zapytanie=$this->zabezpieczznaki($zapytanie);
//--------------------
$error=$this->polaczenie->connect_error;
if($error=="")
if($this->iloscwynikow()>0)
$error=$this->iloscwynikow()." wierszy";
else
$error="0 wierszy";
$error=$this->zabezpieczznaki($error);
//--------------------
//zmienna sql i err nadpisuja standardowe ustawienia
if(($this->pokazzapytania && $sql) || ($this->pokazbledy && $err))
{
$this->raport.=("");
$this->raport.="$this->numerzdarzenia ";
if($this->pokazzapytania && $sql)
$this->raport.=("» $zapytanie « ");
if($this->pokazbledy && $err)
$this->raport.=("» $error « ");
$this->raport.=("
");
//echo("»$nrbledu ");
}
}
//----------------------------------------------------------------------------------------------------
private function zabezpieczznaki($input)
{
$input=str_replace("<","<",$input);
$input=str_replace(">",">",$input);
return $input;
}
//----------------------------------------------------------------------------------------------------
// tu sa funkcje tworzące logi
//----------------------------------------------------------------------------------------------------
private function RootPath()
{
$path_full = dirname($_SERVER['PHP_SELF']);
$path_tab = explode("/", $path_full);
$path_count = count($path_tab);
$path="";
for($i=2;$inumerzdarzenia] operationtime:[".substr($_SESSION['baza']['operationtime'],0,8)."ms]";
$jestkatalognalogi=true;
if(!file_exists($this->RootPath()."/logs"))
if(!mkdir($this->RootPath()."/logs"))
$jestkatalognalogi=false;
//--------------------
$sciezkadoplikuzlogamigood=$this->RootPath()."/logs/good_".date("Y_m_d").".log";
$sciezkadoplikuzlogamierror=$this->RootPath()."/logs/error_".date("Y_m_d").".log";
$sciezkadoplikuzlogamilongtime=$this->RootPath()."/logs/longtime.log";
//--------------------
if($this->polaczenie)
{
$error=$this->polaczenie->connect_error;
if($error=="")
if($this->iloscwynikow()>0)
$error=$this->iloscwynikow()." wierszy";
else
$error="0 wierszy";
}
//--------------------
if($jestkatalognalogi)
{
$this->czysclogi($this->RootPath()."/logs");
//-------------------- loguje długe czasowo zapytania
if($_SESSION['baza']['operationtime']>1)//1s
{
$plik=fopen($sciezkadoplikuzlogamilongtime,"a+");
fwrite($plik,$checkpoint."\n$zapytanie\n$error\n\n");
fclose($plik);
}
//--------------------
if($this->logtype=="all")
{
if($this->polaczenie)
{
if($this->polaczenie->connect_error=="")
{
$plik=fopen($sciezkadoplikuzlogamigood,"a+");
if($znacznik)
fwrite($plik,"--------------------$checkpoint---------------------\n");
else
fwrite($plik,$checkpoint."\n$zapytanie\n$error\n\n");
fclose($plik);
}
if($this->polaczenie->connect_error!="")
{
$plik=fopen($sciezkadoplikuzlogamierror,"a+");
if($znacznik)
fwrite($plik,"--------------------$checkpoint---------------------\n");
else
fwrite($plik,$checkpoint."\n$zapytanie\n$error\n\n");
fclose($plik);
}
}
}
elseif($this->logtype=="error")
{
if($this->polaczenie->connect_error!="")
{
$plik=fopen($sciezkadoplikuzlogamierror,"a+");
if($znacznik)
fwrite($plik,"--------------------$checkpoint---------------------\n");
else
fwrite($plik,$checkpoint."\n$zapytanie\n$error\n\n");
fclose($plik);
}
}
elseif($this->logtype=="good")
{
if($this->polaczenie->connect_error=="")
{
$plik=fopen($sciezkadoplikuzlogamigood,"a+");
if($znacznik)
fwrite($plik,"--------------------$checkpoint---------------------\n");
else
fwrite($plik,$checkpoint."\n$zapytanie\n$error\n\n");
fclose($plik);
}
}
}
}
//----------------------------------------------------------------------------------------------------
private function czysclogi($katalog)
{
$d = dir($katalog);
while(false!==($entry = $d->read()))
{
if($entry!="." && $entry!="..")
{
if((filemtime($katalog."/".$entry)+15552000)numerzdarzenia=$nr;
}
//----------------------------------------------------------------------------------------------------
public function pobierzwiersz($wynik)
{
$row = $wynik->fetch_row();
return $row;
}
//----------------------------------------------------------------------------------------------------
public function backup($pathtofile)
{
//użycie
//$this->strona->baza->backup("./logs/kopiabazy.php.".date("Y_m_d_H_i"));
//pobieram nazwy tablic
$tablice=$this->pobierzdane("show tables;");
if($tablice)
{
$plik=fopen($pathtofile,"w");
while(list($tablica)=$this->pobierzwiersz($tablice))
{
//tu jest filter tablic; Pomijam statystyki
if($tablica=="statystyki_a" || $tablica=="statystyki_d" || $tablica=="statystyki_j" || $tablica=="statystyki_l" || $tablica=="statystyki_m" || $tablica=="statystyki_p")continue;
$sklad="";
//pobieram nazwy kolumn w tablicach
$kolumny=$this->pobierzdane("describe $tablica;");
if($kolumny)
{
$i=0;
$typy="";
while(list($kolumna,$typ)=$this->pobierzwiersz($kolumny))
{//tworze sklad kolumn
$sklad.=$kolumna.",";
$typy[$i++]=substr($typ,0,strpos($typ,"("));
}
$sklad=substr($sklad,0,strlen($sklad)-1);
//pobieram dane z bazy zgodnie z skladem
$wynik=$this->pobierzdane("select $sklad from $tablica;");
if($wynik)
{
while($liniawyniku=$this->pobierzwiersz($wynik))
{
$wartosci="";
foreach($liniawyniku as $key=>$wartosc)
{
$wartosc=str_replace("'",""",$wartosc);
$wartosc=str_replace("\"",""",$wartosc);
$wartosc=str_replace("\r\n"," ",$wartosc);
switch($typy[$key])
{
case "int":
$wartosci.=$wartosc.",";
break;
case "integer":
$wartosci.=$wartosc.",";
break;
case "varchar":
$wartosci.="'$wartosc',";
break;
case "text":
$wartosci.="'$wartosc',";
break;
case "timestamp":
$wartosci.="'$wartosc',";
break;
default:
$wartosci.="'$wartosc',";
}
}
$wartosci=substr($wartosci,0,strlen($wartosci)-1);
fwrite($plik,"$"."this->polaczenie->query(\"insert into $tablica($sklad)values($wartosci);\",\$polaczenie);\n");
}
}
}
else
echo("Tablica $tablica nie zawiera kolumn ");
}
fclose($plik);
}
else
echo("Brak tablic ");
return true;
}
//----------------------------------------------------------------------------------------------------
public function syslog($trace, $dane)
{
//$this->strona->syslog(debug_backtrace(), $dane);
$chceckpoint=$this->checkpoint($trace);
$jestkatalognalogi=true;
if(!file_exists($this->RootPath()."/logs"))
if(!mkdir($this->RootPath()."/logs"))
$jestkatalognalogi=false;
if($jestkatalognalogi)
{
$plik=fopen($this->RootPath()."/logs/databaselog",'a');
fwrite($plik, $chceckpoint."\n".$dane."\n\n");
fclose($plik);
}
}
//----------------------------------------------------------------------------------------------------
}
}
else
die("Klasa już istnieje: ".__FILE__);
?>
Critical error type = 1 message = Uncaught Error: Class 'baza' not found in /www/rrtechnologies/www/www/helpdesk/silnik/silnik.php:38
Stack trace:
#0 /www/rrtechnologies/www/www/helpdesk/index.php(29): silnik->silnik()
#1 /www/rrtechnologies/www/www/helpdesk/index.php(57): index->show()
#2 {main}
thrown file = /www/rrtechnologies/www/www/helpdesk/silnik/silnik.php line = 38