Include - if/else - Cache de fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Include - if/else - Cache de fichier

Re: Include - if/else - Cache de fichier

par gils57 » 23 sept. 2014, 18:28

extra !

merci pour tout.

Re: Include - if/else - Cache de fichier

par ynx » 23 sept. 2014, 17:38

Ah oui effectivement, il faut arrêter l'exécution de ton script après avoir chargé le fichier en cache, sinon plus aucun intérêt à utiliser le cache si on refait le traitement de la page à chaque fois ;)
readfile($cache);
// le fichier en cache est chargé, on s'arrête ici
exit();
Désolé pas de grandes connaissances sur smarty ou prestashop.

Bonne continuation

Re: Include - if/else - Cache de fichier

par xTG » 23 sept. 2014, 17:35

Il y a un petit problème encore.

Le cache fonctionne bien mais le contenu de la page est dupliqué, 2X <body></body>

Sûrement une petite erreur qui se balade ...
Deux personnes qui ont fait une requête en même temps ?
Car sinon je ne vois pas avec le code présenté.

Re: Include - if/else - Cache de fichier

par gils57 » 23 sept. 2014, 17:29

Il y a un petit problème encore.

Le cache fonctionne bien mais le contenu de la page est dupliqué, 2X <body></body>

Sûrement une petite erreur qui se balade ...

Re: Include - if/else - Cache de fichier

par gils57 » 23 sept. 2014, 16:55

Je n'ai qu'un mot, BRAVO !

merci beaucoup !

c'est génial, depuis le temps que je cherchai une solution efficace à ce point.

As tu des connaissances par rapport au modèle de cache smarty / POO propre à prestashop ?

je suis à la recherche d'un développeur bien meilleur que moi ... pour intervenir à certaines occasions voire me former contre rémunération bien entendu.

Cordonnées sur 57informatique

Encore merci.

Re: Include - if/else - Cache de fichier

par ynx » 23 sept. 2014, 16:13

Salut,

Effectivement ton fichier meta.php est exécuté directement lors de l'inclusion de celui-ci, or à ce moment le fichier footer.php n'est pas encore inclus et il y a donc une erreur de syntaxe (if non fermé).

Tu ne peux donc pas fermer le if dans le fichier footer.php, mais tu peux y effectuer la même condition :
meta.php
<?php
        $nom_page = basename($_SERVER['PHP_SELF']);
        $nom_page = str_replace('php','html',$nom_page);
        $cache = "$_SERVER[DOCUMENT_ROOT]/cache/$nom_page";
        $expire = time() - 108000 ;
         
        if(file_exists($cache) && filemtime($cache) > $expire){
                readfile($cache);
                }
        else{
                ob_start();
        }
// ?> la balise de fermeture php est facultative ici : en ne la mettant pas on évite aussi d'afficher des lignes vides
footer.php
<?php
// condition inverse : ce qui équivaut au bloc else de meta.php
if(!file_exists($cache) || filemtime($cache) <= $expire) {
   $tampon = ob_get_contents();
   file_put_contents($cache, $tampon);
   ob_end_flush();
   ob_end_clean();
}
?>
Nous pourrions même optimiser légèrement ceci en utilisant un booléen plutôt que revérifier l’existence et la date du fichier :
meta.php
<?php
        $nom_page = basename($_SERVER['PHP_SELF']);
        $nom_page = str_replace('php','html',$nom_page);
        $cache = "$_SERVER[DOCUMENT_ROOT]/cache/$nom_page";
        $expire = time() - 108000 ;

        // le cache est désactivé par défaut
        $caching = false;

        if(file_exists($cache) && filemtime($cache) > $expire){
                readfile($cache);
        }
        else{
                $caching = true; // on active le cache
                ob_start();
        }
?>
footer.php
<?php
if($caching) {
   $tampon = ob_get_contents();
   file_put_contents($cache, $tampon);
   ob_end_flush();
   ob_end_clean();
}
?>
Bonne journée

Re: Include - if/else - Cache de fichier

par gils57 » 23 sept. 2014, 15:05

Voici :
<?php
        $nom_page = basename($_SERVER['PHP_SELF']);
        $nom_page = str_replace('php','html',$nom_page);
        $cache = "$_SERVER[DOCUMENT_ROOT]/cache/$nom_page";
        $expire = time() - 108000 ;
         
        if(file_exists($cache) && filemtime($cache) > $expire){
                readfile($cache);
                }
        else{
                ob_start();
?>
merci

Re: Include - if/else - Cache de fichier

par arnaud69 » 23 sept. 2014, 14:31

Et le code de ton cacheA.php ?

Include - if/else - Cache de fichier

par gils57 » 23 sept. 2014, 13:57

Bonjour,

j'ai besoin de votre aide concernant include et les conditions pur mettre en place un cache de fichier.
Je souhaite include au début du fichier meta.php (qui est lui même appelé sur toutes les pages), le code cache de fichier suivant :
<?php
	$nom_page = basename($_SERVER['PHP_SELF']); 
	$nom_page = str_replace('php','html',$nom_page); 
	$cache = "$_SERVER[DOCUMENT_ROOT]/cache/$nom_page";
	$expire = time() - 108000 ;
	 
	if(file_exists($cache) && filemtime($cache) > $expire){
		readfile($cache);
		}
	else{
		ob_start();
?>

Dans le module footer.php, j'inclue le reste du code cache de fichier soit :
<?php
$tampon = ob_get_contents(); 
file_put_contents($cache, $tampon); 
ob_end_flush();
ob_end_clean(); 
}
?>
Le code de la page structurellement parlant ressemble à cela :
<?php
session_start();
include("MODULES/meta.php");
?>

entre balises body (php, mysql ...)

<?php
include("MODULES/footer.php")
?>
PROBLEME : le code m'indique que je n'ai pas fermé le else (or celui est bien fermé dans l'include qui termine le cache)

Parse error: syntax error, unexpected end of file in /xxx/xxx/xxx/MODULES/cacheA.php on line 12

Seule solution :que j'ai trouvé, ouvrir chaque page et insérer manuellement le code cache sans passer par les include ...

Si vous avez une solution, je suis preneur !

merci d'avance