NiCo
28 Septembre 2005, 9:12
28 Septembre 2005, 9:12
Tiens voilà le contenu.
J'ai pas pris les commentaires de début de fichier ni le ?> à la fin pour plus de clarté mais le voici :
J'ai pas pris les commentaires de début de fichier ni le ?> à la fin pour plus de clarté mais le voici :
Code (Sélectionner le code)
define('CACHE_FTP', 1);
define('CACHE_SQL', 2);
class cache
{
var $dir;
var $code_to_write = '';
var $only_sql = array();
/*
** Constructeur, assigne un répertoire
*/
function cache($dir)
{
$this->dir = $dir;
}
/*
** Méthode inspirée de la classe de FSB2
** Permet de charger un fichier cache, soit depuis le FTP, soit depuis la table cache de la base de donnée
** -----
** $table :: Nom de la table à charger
*/
function load_table($table, $load_type = CACHE_FTP)
{
$fields = 'fields_' . $table;
$count = 'compte_' . $table;
global $bdd, $langue, $$count, $$fields, $$table;
if ($load_type == CACHE_FTP)
{
if (file_exists($this->dir . 'fichier_' . $table . '.php'))
{
include($this->dir . 'fichier_' . $table . '.php');
}
else
{
die('Le fichier ' . $this->dir . 'fichier_' . $table . '.php n\'existe pas');
}
}
else
{
$sql = 'SELECT * FROM ' . CACHE_TABLE . "
WHERE cache_table = '$table'";
$result = $bdd->requete($sql) OR die("$sql<br />" . $bdd->error());
$row = $bdd->tableau($result);
foreach (array('cache_content' => 'table', 'cache_fields' => 'fields') AS $key => $value)
{
$$$value = unserialize(stripslashes($row[$key]));
if (!is_array($$$value))
{
$$$value = array();
}
}
$$count = count($$table);
}
}
/*
** Ecrit le tableau passé en argument dans le cache en utilisant sa fonction spécifique
** -----
** $data :: Tableau à écrire
** $function :: Nom de la table
** $count_data :: Argument obsolète
*/
function write_in_cache($data, $table, $count_data = 0, $ecrire_ftp = TRUE, $ecrire_sql = TRUE)
{
$fields = 'fields_' . $table;
global $bdd, $langue, $$fields, $$table;
if (!$this->is_aborting())
{
if ($this->only_sql[$table])
{
$ecrire_ftp = FALSE;
$ecrire_sql = TRUE;
}
if ($ecrire_ftp)
{
$this->code_to_write = "<?php\n" . $this->obtain_cache_code($data, $table) . "\n?>";
$this->write_data($this->code_to_write, $this->dir . 'fichier_' . $table . '.php');
}
if ($ecrire_sql)
{
$sql = 'REPLACE INTO ' . CACHE_TABLE . '
(cache_table, cache_content, cache_fields)
VALUES (\'' . $table . '\', \'' . addslashes(serialize($$table)) . '\', \'' . addslashes(serialize($$fields)) . '\')';
$bdd->requete($sql) OR die("$sql<br />" . $bdd->error());
}
}
else
{
die('La connexion a été intérompue, aucune donnée n\'a été écrite dans les fichiers');
}
}
/*
** génère le code à écrire dans le fichier cache
** -----
** $data :: Tableau à écrire
** $function :: Nom de la table
*/
function obtain_cache_code($tab, $function)
{
$fields = 'fields_' . $function;
global $$fields;
if (count($$fields))
{
$code = get_array_code($$fields, 'fields_' . $function) . "\n";
}
else
{
$tmp = array();
if (is_array($tab[0]))
{
foreach($tab[0] AS $k => $v)
{
$tmp[] = $k;
}
}
$code = get_array_code($tmp, 'fields_' . $function) . "\n";
}
$code .= get_array_code($tab, $function) . "\n";
$code .= '$compte_' . $function . ' = count($' . $function . ');';
return ($code);
}
/*
** Vérifie si la connexion n'a pas été intérompue (afin de ne pas corrompre un fichier)
*/
function is_aborting()
{
@ignore_user_abort(1);
return (@connection_aborted() ? TRUE : FALSE);
}
/*
** Ecrit des données dans un fichier
** -----
** $code :: Le texte à écrire
** $file :: Le fichier dans lequel écrire le texte
*/
function write_data($code, $file)
{
@umask(0);
@chmod($file, 0666);
$handle = @fopen($file, 'w');
@flock($handle, LOCK_EX);
if (@fwrite($handle, $code))
{
@fflush($handle);
@flock($handle, LOCK_UN);
@fclose($handle);
@chmod($file, 0666);
unset($code);
return (TRUE);
}
else
{
die('Impossible d\'écrire dans le fichier ' . $file);
}
}
/*
** Convertit un tableau de cache en tableau associatif.
** Le tableau de base ne doit comporter que deux champs par
** ligne, avec comme clef 'name' et 'value'.
** -----
** $tab :: Tableau à convertir
*/
function convert_to_simple_array($tab, $name = 'name', $value = 'value')
{
$new_tab = array();
foreach ($tab AS $v)
{
$new_tab[$v[$name]] = $v[$value];
}
return ($new_tab);
}
/*
** Convertit le tableau associatif en tableau de cache.
** Le tableau doit être de la forme
** $tab = array('k' => 'v', 'k' => 'v', 'k' => 'v', etc ...);
** -----
** $tab :: Tableau à convertir
*/
function convert_to_normal_array($tab, $name = 'name', $value = 'value')
{
$new_tab = array();
$k = 0;
foreach ($tab AS $key => $v)
{
$new_tab[$k][$name] = $key;
$new_tab[$k][$value] = $v;
$k++;
}
return ($new_tab);
}
/*
** Impose un cache SQL pour la table donnée
** -----
** $tablename :: Nom de la table en question
*/
function use_sql($tablename)
{
$this->only_sql[$tablename] = TRUE;
}
}

).