[Class] Problème d'existence

Mammouth du PHP | 1668 Messages

05 juil. 2008, 12:07

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 :)
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 5924 Messages

05 juil. 2008, 13:36

Tu as activé toutes les erreurs ?

Mammouth du PHP | 1668 Messages

05 juil. 2008, 14:21

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 "...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol