Bonjour,

je regarde le Tutoriel PHP : Créer un système de Cache, je suis à 13:48 de la vidéo, aucun fichier n'est généré. Je ne vois pas d'où vient l'erreur. Est-ce que vous avez une idée, s'il vous plaît ?

Ce que je fais

test.php

<?php $time = microtime(TRUE); ?>
<?php require_once "class/class.cache.php"; ?>
<?php define( "ROOT", dirname(__FILE__) ); ?>
<?php $cache = new Cache("${ROOT}/tmp", 1); ?>

<hr />

<?php

    if ( !$variable = $cache->read("variable") ) {
        sleep(1);
        $variable = "Ici mon texte";
        $cache->write("variable", $variable);
    }

?>

<p><?= $variable; ?></p>

<hr />

<p>
    La page a mis à peu près
    <span class="label secondary"><?= round(microtime(TRUE) - $time, 3); ?></span>
    secondes à se générer
</p>

class.cache.php

<?php

    class Cache {
        public $dirname;
        public $durationMinutes;

        public function __construct($dirname, $durationMinutes) {
            $this->dirname = $dirname;
            $this->durationMinutes = $durationMinutes;
        }

        public function write($filename, $content) {
            return file_put_contents("{$this->dirname}/{$filename}", $content);
        }

        public function read($filename) {
            $file = "{$this->dirname}/{$filename}";
            $lifetime = ( time() - filemtime($file) ) / 60;

            if ($lifetime = $this->durationMinutes) {
                return false;
            }

            return file_get_contents($file);
        }
    }

Ce que je veux

Je veux réussir à générer/mettre à jour le fichier au raffraîchissement de la page.

Ce que j'obtiens

Aucun fichier n'est généré.

Merci d'avance pour avoir pris le temps de me répondre.

1 réponse


Bonjour,

Qu'est-ce que tu a déjà fait comme debug ?

En l'occurence, il faudrait vérifier dans l'ordre :

  • est-ce que la fonction "write()" est bien appelée ? ;
  • est-ce que $dirname est bien un répertoire existant et est-ce que le programme a bien les droits pour écrire dedans ? ;
  • est-ce que "file_put_contents()" est bien executé sans erreur ? ;
  • est-ce que le chemin "{$this->dirname}/{$filename}" est bien un nom de fichier valide ? (pouwwark ! ça me donne toujours la gerbe la concataination avec des accolades...) ;

N'ésite pas à abuser du "var_dump()" et du "die()"...