[script] Mise en cache des pages PHP
-

fandecine - Modérateur

- Messages: 2047
- Inscription: 2 Avr 2005
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 !
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

- Messages: 45
- Inscription: 12 Oct 2005
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.
- sdeplo
- Nouveau WRInaute

- Messages: 8
- Inscription: 3 Mar 2007
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")
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é

- Messages: 2415
- Inscription: 11 Fév 2005
ou plutôt &&($_GET['part']!="recherch")
- sdeplo
- Nouveau WRInaute

- Messages: 8
- Inscription: 3 Mar 2007
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!
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é

- Messages: 2415
- Inscription: 11 Fév 2005
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

- Messages: 8
- Inscription: 3 Mar 2007
"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
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é

- Messages: 2415
- Inscription: 11 Fév 2005
if(mysql_connect(....)) {
//traitement
}
else
{
$recupererCacheCarPasDeConnexionSQL=true;
}
//traitement
}
else
{
$recupererCacheCarPasDeConnexionSQL=true;
}
- Kijer
- WRInaute discret

- Messages: 133
- Inscription: 9 Sep 2006
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
Merci de m'éclairer
-

Patrice A. - WRInaute passionné

- Messages: 2415
- Inscription: 11 Fév 2005
Tu mets tes liens admin en-dehors de la partie en cache...
- Kijer
- WRInaute discret

- Messages: 133
- Inscription: 9 Sep 2006
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
- Kijer
- WRInaute discret

- Messages: 133
- Inscription: 9 Sep 2006
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

- Messages: 401
- Inscription: 6 Avr 2003
dans ton fichier php qui te sers de gabarit pour générer ton cache :
De cette façon, le fichier cache devient :
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.
- 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.
Lectures recommandées sur ce thème :
- [script] Mise en cache des pages PHP - V2
- Problème de mise en cache de pages PHP
- [tutoriel] Mise en cache en PHP, la version complète.
- Mise en cache PHP et librairie GD, est ce correct svp ?
- Utilisation intensive de la mise en cache des pages PHP.
- Mise en cache des pages php : mon alternative hérétique !
- [script] php class cache : accélérez vos pages !
- Recherche script d'annuaire PHP avec lien caché
- Mise en place d'un script de news php dans wordpress
- [Mise en cache] cryptage page html en cache
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités
