[script] Mise en cache des pages PHP


fandecine
Modérateur
Modérateur
 
Messages: 2047
Inscription: 2 Avr 2005

Message le Ven Fév 02, 2007 9:29

Ryoh a écrit:Bonjour,

J'ai testé le code, le souci c'est que je sais pas si ça fonctionne... j'ai rafraichi la page, dur de savoir si ça va plus vite...


Le gain en rapidité n'est pas le but de ce script, bien qu'il puisse être important pour une page avec de grosses requêtes SQL. L'objet du script est d'éconnomiser les ressources du serveur.

Ryoh a écrit:j'ai un dossier cache avec un fichier cache-index.php à l'intérieur.. ça veut dire que ça fonctionne ou pas ? parce que sur la page d'accueil, j'ai toujours l'url du site en index.php et non pas index.html

Je pense que tu mélange l'utilisaton de ce script avec l'url rewriting ! :wink:

Mais si tu as des fichiers qui se créent dans le dossier cache, cela prouve que la mise en cache fonctionne. Pour vérifier que l'utilisation du cache fonctionne, fait une modif (légère!) dans ton index.php. Si elle n'apparait pas lorsque que tu visionne la page, c'est que le fichier en cache est bien utilisé!

mijsoot
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 45
Inscription: 12 Oct 2005

Message le Ven Fév 02, 2007 15:15

Ryoh a écrit:Bonjour,

J'ai testé le code, le souci c'est que je sais pas si ça fonctionne... j'ai rafraichi la page, dur de savoir si ça va plus vite...

j'ai un dossier cache avec un fichier cache-index.php à l'intérieur.. ça veut dire que ça fonctionne ou pas ? parce que sur la page d'accueil, j'ai toujours l'url du site en index.php et non pas index.html


Bonjour,
Bon pour voir si cela fonctionne c'est simple il suffit de mettre (dans le fichier inc_cache.php) define ("DEBUG_TIME", false); à TRUE et tu auras un timestamp en bas de page, par contre pour le voir rapidement il faut changer define (CACHE_TIMEOUT, 24*60*60); par define (CACHE_TIMEOUT, 60); pour une minute par exemple. Et donc en actualisant ta page tu verra que le timestamp ne changera pas pendant une minute et si il change ensuite c'est que cela fonctionne.
Par contre je ne comprends pas ce que tu veux nous dire avec index.php et index.html, ce script ne joue pas le rôle d'URL_Rewriting donc cela ne change pas le nom des fichiers.
Voilou, voilà, j'espère que cela t'aidera.

Ryoh
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 4
Inscription: 1 Nov 2005

Message le Ven Fév 02, 2007 19:27

je suis allé sur phpmyadmin pour ajouter des données, et ça s'est pas affiché sur mon site, donc ok ça fonctionne.

c'est la technique de mise en cache la plus simple que j'ai vu, merci !

et je crois que je vais rester sur ce forum :D

sdeplo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 8
Inscription: 3 Mar 2007

Message le Sam Mar 03, 2007 20:59

merci pour ce script vraiment très simple et efficace. Mais il me faudrait une optimisation pour mon site et débutante en PHP, je n'ai pas trouvé la bonne ecriture de ce qu'il me faudrait.

Je n'ai qu'une page index.php sur mon site et le contenu change en fonction des variables qui se trouve derrière (index.php?art=45&part=rub). Sauf que certaines pages lors d'une recherche sur le site (index.php?part=recherch) sont mises en cache (formulaire en POST) et du coup lors d'une recherche, c'est la page mise en cache qui s'affiche donc pas les bons résultats pour les internautes suivants...

De quel manière simple pourrait on exclure certaines URL du script pour ne pas utiliser les pages en cache quand l'URL contient "part=recherch" par exemple.

Merci à vous, je ne sais pas si j'ai été claire.

Quelque chose comme ça fonctionnerait-il?:

if (@filemtime($fichierCache)<time()-(3600*24) && !strstr($urldemandee, "part=recherch")


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Dim Mar 04, 2007 19:30

ou plutôt &&($_GET['part']!="recherch")

sdeplo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 8
Inscription: 3 Mar 2007

Message le Dim Mar 04, 2007 20:49

merci pour la réponse. en fait j'ai fait comme ceci entre temps et ça semble fonctionner:

if (@filemtime($fichierCache)<time()-(3600*2) || (@filesize($fichierCache) == 0)|| $rub=="recherch"

par contre, un problème se pose si plusieurs pages non en cache sont appelés en meme temps, il y a une grosse surchage de la base SQL et là , la page mise en cache contient le fameux "too many connections" du coup elle s'affiche pour les autres utilisteurs après puisqu'elle est enregistrée.
Quel serait la solution pour eviter ce problème?

Merci par avance!


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Lun Mar 05, 2007 8:18

tu testes tous tes appels sur mysql_quelque chose() et dès que l'un d'eux est faux, tu laisses tomber la génération de la page, pour afficher plutot la version en cache.

sdeplo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 8
Inscription: 3 Mar 2007

Message le Lun Mar 05, 2007 9:49

"tu testes tous tes appels sur mysql_quelque chose() et dès que l'un d'eux est faux, tu laisses tomber la génération de la page, pour afficher plutot la version en cache."

euh , je ne vois pas très bien comment faire... de manière temporaire j'efface systematiquement les fichiers HTMl générés de moins de 10 Ko (car toutes mes pages font plus)
La page "too many connections" doit faire moins!

(@filesize($fichierCache) <= 10000


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Lun Mar 05, 2007 12:06

if(mysql_connect(....)) {

//traitement

}
else
{
$recupererCacheCarPasDeConnexionSQL=true;
}

Kijer
WRInaute discret
WRInaute discret
 
Messages: 133
Inscription: 9 Sep 2006

Message le Ven Avr 06, 2007 1:08

J'aimerai quelques renseignements complémentaires, si en utilisant le script de fandecine, dans ma page j'ai des liens staff, comme admin, ou editer etc.. comment je peux gerer ça ? car si c'est moi qui fait actualiser le cache, j'ai pas trop envie que les visiteurs s'amusent a cliquer sur les liens (meme si ca craint pas, vont se faire refouler), sinon inversement, si dans 99% des cas c'est un membre qui fait le refresh, je ne verrai plus mes liens d'administration ..

Merci de m'éclairer ;)


Patrice A.
WRInaute passionné
WRInaute passionné
 
Messages: 2415
Inscription: 11 Fév 2005

Message le Ven Avr 06, 2007 13:26

Tu mets tes liens admin en-dehors de la partie en cache...

Kijer
WRInaute discret
WRInaute discret
 
Messages: 133
Inscription: 9 Sep 2006

Message le Ven Avr 06, 2007 14:03

Dj_Apx a écrit:Tu mets tes liens admin en-dehors de la partie en cache...


Theoriquement c'est évident.. mais à appliquer pas forcement.

Je m'explique :

mon architecture actuelle est de type :
Code: Tout sélectionner
<?php
include('header.php');

// et ici le contenu different selon mes pages

include('footer.php');
?>


dans mon header j'ai le ob_start() et dans le footer j'ai le ob_end_flush(), donc comment reussir à isoler certaines parties de mon centre ?

Merci


nalrem
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 401
Inscription: 6 Avr 2003

Message le Ven Avr 06, 2007 14:21

mets du code qui génère du code php.
Comme ça, même en cache il sera interprété à chaque fois.

Evidemment, tu utilises ce code là pour détecter si tu es loggué en admin ou visiteurs.

Kijer
WRInaute discret
WRInaute discret
 
Messages: 133
Inscription: 9 Sep 2006

Message le Ven Avr 06, 2007 15:03

nalrem a écrit:mets du code qui génère du code php.
Comme ça, même en cache il sera interprété à chaque fois.

Evidemment, tu utilises ce code là pour détecter si tu es loggué en admin ou visiteurs.


Je ne comprends pas la logique, passer du code php a du code php, pourrai tu m'en dire plus car je vois pas l'avantage.


nalrem
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 401
Inscription: 6 Avr 2003

Message le Ven Avr 06, 2007 16:04

dans ton fichier php qui te sers de gabarit pour générer ton cache :

Code: Tout sélectionner
<?php
include('header.php');
//là tous les machins qui sont pour tout le monde


// regarde si tu es lechef :
echo '<?php
if ($jesuislechef==true){

}
else {

}
?>';

include('footer.php');
?>


De cette façon, le fichier cache devient :
Code: Tout sélectionner
les machins éventuels générés par le header lors de la mise en cache
et là tous les machins qui sont pour tout le monde

<?php
if ($jesuislechef==true){

}
else {

}
?>
//les machins éventuels générés par le footer
lors de la mise en cache


Ainsi tu as certes une partie des choses qui ne sont pas vraiment en cache, mais si tu ne mets rien de couteux en ressources, c'est jouable.

[script] Mise en cache des pages PHP [script] Mise en cache des pages PHP

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités