\{\{ ?(.*) ?\}\} sera peut-être une regex trop large, surtout avec le drapeau s (DOT_ALL).
Attention à ce genre de fonction niveau injection:
Attention à ce genre de fonction niveau injection:
Code PHP :
<?php
public function write($filename, $content)
{
$filename = $this->cache_dir . $filename . $this->cache_suffix;
file_put_contents( $filename, $content);
}
Si $filename provient de l'extérieur, tu donnes accès à tout le système de fichier (ou presque). Note que même s'il ne vient pas de l'extérieur, la lecture du code actuel ne permet pas de s'en assurer, en d'autres mots, même si la variable $filename est sécurisée ailleurs, elle ne l'est pas ici, et donc il arrivera un jour où l'injection aura lieu (pas sûr que je sois bien clair).
Pareil pour l'autre méthode de cette même classe.
Manque les getter/setter à cette FileCache. Note que l'héritage est moins souple que la composition.
C'est une bonne chose que d'avoir tout mis dans un namespace principal
N'oublie pas de commenter tout ça pour que ce soit réellement utilisable sur le long terme.
Attention à la licence GPL, qui peut-être trop raide pour certains cas (de mémoire, le code source d'une appli utilisant du code GPL doit être aussi GPL "ou presque").
J'ai pas regardé la logique de fond du code, mais ça semble pas mal sinon J'ai toujours un peu de mal avec les eval() en revanche...
[edit] le ob_start() dans le constructeur du Viewer me semble mal venu: il va créer des effets de bord indésirable. Le constructeur devrait avoir seulement la charge de créer l'objet, pas celle de faire des traitements annexes. Le ob_start() (précédé d'un ob_clean?!) serait mieux placé dans la méthode display().