J'ai fais deux topic sur ma class, car j'ai deux problèmes distinct, he vais traité ici mon second problème...
Lorsque j'éxécute ce script :
<?php
include("Kache.php");
$cache=new Kache("test");
// $cache->detruit();
if (!$cache->charge()) {
// On pourrait remplacer cette ligne par un while qui liste les news ou qui cré un fichier XML, dans le casd'un système XML/XSLT
$chaine="<html><head><title>Test du système Kache<title></head><body><p>le teste 1 un marche</p>";
$cache->genere($chaine);
}
echo $cache->cache;
$tableau=array("ligne 1", "ligne 2", "ligne 3", "ligne 4", "ligne 5");
$cache->genere($tableau, false);
echo "<p><p><p>Test 2 :</p>";
foreach ($cache as $valeur) {
echo "<p>".$valeur."</p>";
}
$cache->detruit(true);
$tableau2=array("clef 1" => "ligne 1", "clef 2" => "ligne 2", "clef 3" => "ligne 3", "clef 4" => "ligne 4", "clef 5" => "ligne 5");
$cache->genere($tableau, false);
echo "<p><p><p>Test 3 :</p>";
foreach ($cache as $clef => $valeur) {
echo "<p><b>[".$clef."]</b> - ".$valeur."</p>";
}
echo "<p><p><p>Test 4 :</p>";
foreach ($cache as $valeur) {
echo "<p>".$valeur."</p>";
}
?>
Si le fichier éxiste, j'ai une page blanche, alors que s'il n'éxiste pas j'ai un résultat "normal", je ne comprend pas : voilà un bout de ma class :
class Kache implements Iterator {
// Variables
private $chemin_cache="cache/"; // Chemin du répertoire des fichier caches
private $extention=".kache"; // Extention des fichier caches
private $nom; // nom du fichier cache
public $cache; // Contenu du cache
// Variables pour les fonctions itératrices
private $clef=array();// Les clefs
private $valeur=array();// Les valeurs
private $index=0; // L'index
// Fonctions
public function __construct($nom=NULL, $chemin_cache="cache/", $extention=".kache") {
if (!empty($nom)) {
$this->nom=$nom;
}
else {
preg_match("#\/([a-zA-Z0-9_\-\.]+)$#", $_SERVER['REQUEST_URI'], $matches);
$this->nom=$matches[1];
}
if (!empty($chemin_cache) && $chemin_cache!=$this->chemin_cache) {
if (is_dir($chemin_cache) && preg_match("#\/$#", $chemin_cache)) {
$this->chemin_cache=$chemin_cache;
}
else {
die("Le chemin du cache (<b>".$chemin_cache."</b>) n'éxiste pas...");
}
}
if (!empty($extention) && $extention!=$this->extention) {
if (preg_match("#^\.#", $extention)) {
$this->extention=$extention;
}
else {
die("L'extention des fichier cache définie (<b>".$extention."</b>) est incorrecte, vous avez dût oublié un point au début");
}
}
}
// Génère/Ecrit le cache
public function genere($contenu=NULL, $existe=true)
{
$existe=(bool) $existe;
if (!$existe) {
if(!empty($contenu)){
$this->cache=$contenu;
}
else {
die("Veuillez stipuler un contenu");
}
}
else {
if(!empty($contenu)){
$this->cache=$contenu;
}
else {
die("Veuillez stipuler un contenu");
}
}
$this->test_tableau();
// utilisation de serialize() pour transformer $content en chaine de caractères
$contenu_serialize = serialize($this->cache);
// échappement les caractères spéciaux pour pouvoir mettre le tout entre quotes dans le futur fichier
$contenu_serialize = str_replace(array('', "'", "0"), array('\\', '\'', '0'), $contenu_serialize);
// création du code php à stocker dans le fichier
$contenu_serialize = "<?php" . "\n" . '$cache = unserialize("' . $contenu_serialize . '");' . "\n" . '?>';
// écriture du code dans le fichier
$fichier = fopen($this->chemin_cache.$this->nom.$this->extention, 'w');
$resultat = fwrite($fichier, $contenu_serialize);
fclose($fichier);
// renvoie true si l'écriture du fichier a réussi
return $resultat;
}
// Récupère/charge et retourne le cache contenu dans le fichier...
public function charge()
{
if(!@include($this->chemin_cache.$this->nom.$this->extention)){
return false;
}
else {
$this->cache=$cache;
$this->test_tableau();
return $this->cache;
}
}
// Detruit le cache
public function detruit($vide=false){
$vide=(bool)$vide;
if ($vide) {
$this->cache=NULL;
$this->index=0;
unset($this->clef);
unset($this->valeur);
}
return @unlink($this->chemin_cache.$this->nom.$this->extention);
}
private function test_tableau(){
if(is_array($this->cache)){
foreach ($this->cache as $clef => $valeur) {
$this->clef[]=$clef;
$this->valeur[]=$valeur;
}
return true;
}
return false;
}
//...
}
?>
Je ne comprends pas...Par avance merci pour vos réponses