Page 1 sur 1

[Class] Problème d'existence

Posté : 05 juil. 2008, 12:07
par katagoto
Bonjour à toutes et tous,

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 :)

Posté : 05 juil. 2008, 13:36
par Sékiltoyai
Tu as activé toutes les erreurs ?

Posté : 05 juil. 2008, 14:21
par katagoto
Si je consulte les logs j'ai :
[05-Jul-2008 11:10:22] PHP Warning: PHP Startup: Unable to load dynamic library 'D:/wamp/bin/php/php5.2.6/ext/php_pdo_pgsql.dll' - Le module spécifié est introuvable.

in Unknown on line 0

[05-Jul-2008 11:10:54] PHP Warning: Kache::include(cache/test.kache) [<a href='kache.include'>kache.include</a>]: failed to open stream: No such file or directory in D:\wamp\www\test\Kache.php on line 106

[05-Jul-2008 11:10:54] PHP Warning: Kache::include() [<a href='function.include'>function.include</a>]: Failed opening 'cache/test.kache' for inclusion (include_path='.;C:\php5\pear') in D:\wamp\www\test\Kache.php on line 106

[05-Jul-2008 11:10:54] PHP Fatal error: Using $this when not in object context in D:\wamp\www\test\test_kache.php on line 9

[05-Jul-2008 11:12:54] PHP Fatal error: Using $this when not in object context in D:\wamp\www\test\test_kache.php on line 9

[05-Jul-2008 11:25:30] PHP Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in D:\wamp\www\test\test_kache.php on line 38

[05-Jul-2008 13:58:15] PHP Warning: PHP Startup: Unable to load dynamic library 'D:/wamp/bin/php/php5.2.6/ext/php_pdo_pgsql.dll' - Le module spécifié est introuvable.

in Unknown on line 0

[05-Jul-2008 13:58:16] PHP Warning: PHP Startup: Unable to load dynamic library 'D:/wamp/bin/php/php5.2.6/ext/php_pdo_pgsql.dll' - Le module spécifié est introuvable.

in Unknown on line 0
Problème résolu, une histoire de "...