Vous êtes sur la page 1sur 5

Classes.ScriptsPHP.org SQLite 1.

La classe SQLite reprend les principales fonctionnalités des fonctions PHP associées. Son but, n'est donc pas de
remplacer ces fonctions, mais de vous permettre , éventuellement, de faire de l'abstraction de base de données.
Notamment grâce à une classe PostgresSQL, ou MySQL... La classe intègre aussi la fonctionnalité de cache de donnée
.

Les réglages du ramasse miettes sont effectués dans la classe elle même avec la variable $Bdd->gc_time=86400. Le
chemin du répertoire de cache se gère de même avec $Bdd->cache_path='cache'. Lors de la mise en place de la classe
penser à créer le répertoire de cache.

WARNING : penser à protéger votre fichier de base de données SQLlite en le mettant dans un répertoire protégé par un
.htaccess par exemple, car en le laissant dans l'arborescence web n'importe qui pourrait récupérer vos données.

Nouvelle Instance

SQLite( string Host, string User, string Password, string Base)


Nouvelle Instance. Seul le paramètre Base doit etre renseigné,
les autres ne servent qu' assurer la compatibilité avec les autres classes d' abstractions
$Bdd = new SQLite('', '', '', 'MaBase')

Connection et sélection de la Base

connect( string Base)


Cette methode sert à se connecter au serveur SQLite et de sélectionner la base de données où l' on va travailler.
$Bdd -> connect( 'base')

Envoyez une requete

send_query( string Query [, resource Link])


Envoie une requete SQL. L'appel de $Bdd->connect() n'est pas nécessaire avant, la connexion étant effectuée automatiquement.
$Bdd -> send_query('SELECT truc FROM machin')

Nombre de résultat(s) retourné(s) par une requete

num_rows()
Se substitue a mysql_num_rows() . Renvoie le nombre de résultat(s) renvoyé(s) par la dernière requête.
$Bdd -> num_rows()

Page 1/5
Classes.ScriptsPHP.org SQLite 1.1

Envoie une requete et met le resultat au cache

get_cached_data( string Request, int time)


get_cached_data, vérifie que le resultat n'est pas dans le cache de donnée, et au besoin execute la requête.
puis renvoie le résultat sous forme d'un tableau associatif comme le ferai sqlite_fetch_array(), enfin il met a jour le cache.
$Bdd -> get_cached_data('SELECT machin FROM truc', 600)

Source Code

<?php
/**********************************************************************************************************/
abstract class GC {

function rungc($cache_path,$gc_max) {
/*
Ici on a une routine de ramasse miette
qui nettoie le contenu du cache des fichiers hors d'age
et evite d'avoir un cache trop volumineux
tout les fichiers dont l'age est supérieur a gc_max
sont supprimés
*/
//echo "<p>.:| GC chemin:$cache_path |:.</p>";
//$handle=opendir(dirname($cache_path));
$handle=opendir($cache_path);
while ($file = readdir($handle)) {
$path=dirname($cache_path).'/'.$file;
//echo "<p>.:| $path |:.</p>";
if ( is_file($path) && filemtime($path)<time()-$gc_max && $file!='.htaccess' ) {
GC::delfile($path);
}
}

function delfile($file) {
/*
là une routine qui permet l'effacement du fichier file
sous unix puis windows
*/
@unlink($file);
clearstatcache();
if (@file_exists($file)) {
$filesys = str_replace("/", "\\", $file);
@system("del $filesys");
clearstatcache();
if (@file_exists($file)) {
@chmod ($file, 0775);
@unlink($file);
@system("del $filesys");
}
}
clearstatcache();
return @file_exists($file);

Page 2/5
Classes.ScriptsPHP.org SQLite 1.1

/*
if (@file_exists($file)) {return FALSE; }
else { return TRUE; }
*/
}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class SQLite extends GC {

public $base;
public $cache_path = 'cache';
public $gc_time=86400;

private $connect_id = 0;
private $error;
private $records = array();

function __construct($Host='', $User='', $Pass='', $Base='mabase') {


$this->base=$Base;

//require_once('gc.php');
//$gcsql = new GC($this->cache_path, $this->gc_time);
srand((double)microtime()*1000000);
if (!rand(0,99)) {
parent::rungc($this->cache_path,$this->gc_time);
}
}

function __destruct() {
if($this->connect_id) {
$this->close($this->connect_id);
}
}

public function connect($Base) {


//$this->connect_id = @sqlite_open($Base, 0666, $this->error);
/*
if($this->connect_id) {
return $this->connect_id;
}
*/
return $this->connect_id = @sqlite_open($Base, 0666, $this->error);
}

public function Send_Query($query) {


if ( !$this->connect_id ) $this->connect($this->base);
if ( $this->result_id = @sqlite_query($query, $this->connect_id) ) {
$this->query = trim($query);
$this->error = '';
return $this->result_id;
} else {
$this->error= sqlite_error_string(sqlite_last_error($this->connect_id));
//echo $this->error;
//echo $query;
return FALSE;
}

Page 3/5
Classes.ScriptsPHP.org SQLite 1.1

public function last_insert_id() {


return @sqlite_last_insert_rowid();
}

public function num_rows() {


if ( isset($this->result_id) ) {
if ( preg_match('`^select`i',trim($this->query)) ) {
return @sqlite_num_rows($this->result_id);
}
//if ( preg_match('`^(insert|update|delete)`i',$this->query) ) return mysql_affected_rows($this->result_id);
} else {
return count($this->records);
}
}

public function get_object($query) {


//return @mysql_fetch_object($query);
}

public function get_array($query, $mode='ASSOC') {


switch($mode) {
case 'NUMERIC' :
return @sqlite_fetch_array($query, SQLITE_NUM);
break;
case 'BOTH' :
return @sqlite_fetch_array($query);
break;
case 'ASSOC' :
default :
return @sqlite_fetch_array($query, SQLITE_ASSOC);
}
}

public function return_error() {


return sqlite_error_string(sqlite_last_error($this->connect_id));
}

// PUBLIC : ferme la connection;


public function close() {
return sqlite_close($this->connect_id) ;
}

// PUBLIC : vide les resultat des requete


public function free_result() {

public function get_cached_data($request,$time=0) {


$this->cachename=$this->cache_path.'/'.md5($request).'.cachesql';
if ( file_exists($this->cachename) && filemtime($this->cachename) > (time() - $time)) {
$records = unserialize(file_get_contents($this->cachename));
} else {
if (!($this->result=$this->Send_Query($request))) return FALSE;
while ($record = $this->get_array($this->result) ) {
$records[] = $record;
}
$OUTPUT = serialize($records);
$fp = fopen($this->cachename,"wb");

Page 4/5
Classes.ScriptsPHP.org SQLite 1.1

@flock($fp,2);
fputs($fp, $OUTPUT);
@flock($fp,3);
fclose($fp);
}
return $records;
}

// PUBLIC : ajoute les slashe sql et C pour le stockage des BLOB


public function prepare_blob($file) {
$blob = file_get_contents($file);
$blob = addslashes($blob);
$blob = addcslashes($blob, "\0");
return $blob;
}

}// end class

?>

Page 5/5

Vous aimerez peut-être aussi