[script] Mise en cache des pages PHP
- thierry8
- WRInaute accro

- Messages: 3251
- Inscription: 11 Juil 2005
c'est bon j'ai compris !
si on utilise ob_end_clean() on efface le buffer ! mais on ne reprend pas le contenu pour l'afficher ! nous l'avons repris pour le mettre dans une variable mais pas dans l'affichage ilico ! bien compris ! merci encore et désolé !
Par contre pour gérer des passages de variable (?test=rien) quel procéder employez-vous ?
EDIT:
si l'on pratique l'url rewriting, est ce que le paramètre REQUEST_URI se base sur l'url réécrite ou sur celle entrée par l'utilisateur ? (dans le deuxième cas cela facilite la tâche) ?
si on utilise ob_end_clean() on efface le buffer ! mais on ne reprend pas le contenu pour l'afficher ! nous l'avons repris pour le mettre dans une variable mais pas dans l'affichage ilico ! bien compris ! merci encore et désolé !
Par contre pour gérer des passages de variable (?test=rien) quel procéder employez-vous ?
EDIT:
si l'on pratique l'url rewriting, est ce que le paramètre REQUEST_URI se base sur l'url réécrite ou sur celle entrée par l'utilisateur ? (dans le deuxième cas cela facilite la tâche) ?
-

fandecine - Modérateur

- Messages: 2047
- Inscription: 2 Avr 2005
thierry8 a écrit:si l'on pratique l'url rewriting, est ce que le paramètre REQUEST_URI se base sur l'url réécrite ou sur celle entrée par l'utilisateur ?
REQUEST_URI contient l'url rewrité.
Si pas de rewriting, il faut convertir l'url avec les parametres en nom de fichier unique.
- thierry8
- WRInaute accro

- Messages: 3251
- Inscription: 11 Juil 2005
ok ! donc ca simplifie tout si l'on emploie l'url rewrité !!!
(enfin si j'ai bien compris:
url de l'utilisateur:
www.site.fr/page-8.html
url réécrite:
www.site.fr/?page=8
mais le REQUEST_URI se base sur www.site.fr/page-8.html ?
bien compris ? aïe
impecable ce script !!!
encore bravo !
je crois que ça y est ! j'ai fini de vous embettez !!!!
merci mille fois..........!!!!!!!!!!!
(enfin si j'ai bien compris:
url de l'utilisateur:
www.site.fr/page-8.html
url réécrite:
www.site.fr/?page=8
mais le REQUEST_URI se base sur www.site.fr/page-8.html ?
bien compris ? aïe
impecable ce script !!!
encore bravo !
je crois que ça y est ! j'ai fini de vous embettez !!!!
merci mille fois..........!!!!!!!!!!!
-

anamorph - Nouveau WRInaute

- Messages: 38
- Inscription: 17 Déc 2004
Salut à tous,
Je n'arrive pas encore à faire fonctionner ce fameux script comme je voudrais. En fait j'ai un bout de code tout simple qui s'occupe de charger/renvoyer un flux passé en paramètre grâce à la méthode readfile), je me sert de ce script pour charger des fichiers xml se trouvant sur un domaine différent (la méthode javascript xmlHttpRequest ne supportant pas des appels sur des domaines différents)
Les fichiers sont bien crée en cache mais l'appel au php me revoit :
Je me demande s'il n'y a en fait pas une histoire que codage de caractères .. Mon code:
Merci de votre aide.
Florent
Je n'arrive pas encore à faire fonctionner ce fameux script comme je voudrais. En fait j'ai un bout de code tout simple qui s'occupe de charger/renvoyer un flux passé en paramètre grâce à la méthode readfile), je me sert de ce script pour charger des fichiers xml se trouvant sur un domaine différent (la méthode javascript xmlHttpRequest ne supportant pas des appels sur des domaines différents)
Les fichiers sont bien crée en cache mais l'appel au php me revoit :
- Code: Tout sélectionner
Parse error: parse error, unexpected T_STRING in
Je me demande s'il n'y a en fait pas une histoire que codage de caractères .. Mon code:
- Code: Tout sélectionner
<?PHP
$urldemandee=$_SERVER['REQUEST_URI']; //on lit l'adresse de la page
$urldemandee=ereg_replace('/','-',$urldemandee); // on tranforme l'adresse en nom de fichier
if($urldemandee=="-") $urldemandee="-index.html"; // si l'adresse est la racine du site, on ajoute index.html
$fichierCache="cache/cache".$urldemandee; // on construit le chemin du fichier cache de la page
if (@filemtime($fichierCache)<time()-(3600*24*360)) { //si la page n'existe pas dans le cache ou si elle a expiré
ob_start(); // on démarre la bufferisation de la page: rien de ce qui suit n'est envoyé au navigateur
?>
<?php
header("Content-Type: text/xml");
$flux = $_GET['url'];
// make sure that some page is really being called
if ($flux && $flux != ""){
// make sure that an http call is being made - otherwise there's access to any file on machine...
if ((strpos($flux, "http://") === 0) || (strpos($flux, "https://") === 0)){
readfile($flux);
}
}
?>
<?php
$contenuCache = ob_get_contents(); // on recuperre le contenu du buffer
ob_end_flush();// on termine la bufferisation
$fd = fopen("$fichierCache", "w"); // on ouvre le fichier cache
if ($fd) {
fwrite($fd,$contenuCache); // on ecrit le contenu du buffer dans le fichier cache
fclose($fd);
}
} else { // le fichier cache existe déjà
include ($fichierCache); // on le copie ici
}
?>
Merci de votre aide.
Florent
-

anamorph - Nouveau WRInaute

- Messages: 38
- Inscription: 17 Déc 2004
je viens de résoudre mon problème :
pour renvoyer le fichier j'utilise
readfile($fichierCache) au lien de include ($fichierCache)
en fait ce qui posait problème c'est la partie supérieur du xml : <?xml version="1.0" encoding="ISO-8859-1"?>
qui devait être interprété comme du php.
pour renvoyer le fichier j'utilise
readfile($fichierCache) au lien de include ($fichierCache)
en fait ce qui posait problème c'est la partie supérieur du xml : <?xml version="1.0" encoding="ISO-8859-1"?>
qui devait être interprété comme du php.
-

NoName - WRInaute discret

- Messages: 71
- Inscription: 4 Nov 2004
Hello
Pour ma part, j'attendait que jmCache soit compatible php5, mais apparement ils ne sont pas préssés
J'essaye donc ce system, j'ai modifié le script de maniere a appeler une fonction pour les pages devant êtres mises en cache.
Code effacé
L'appel se fait de cette maniere :
------------------ debut page ------------------
require('my_file.php5');
le contenu de ma page
caching();
------------------ fin page ------------------
Pb, l'écriture du fichier ne fonctionne pas, et le $flag est bien = 5
Une idée ?
Pour ma part, j'attendait que jmCache soit compatible php5, mais apparement ils ne sont pas préssés
J'essaye donc ce system, j'ai modifié le script de maniere a appeler une fonction pour les pages devant êtres mises en cache.
Code effacé
L'appel se fait de cette maniere :
------------------ debut page ------------------
require('my_file.php5');
le contenu de ma page
caching();
------------------ fin page ------------------
Pb, l'écriture du fichier ne fonctionne pas, et le $flag est bien = 5
Une idée ?
Dernière édition par NoName le Ven Aoû 26, 2005 19:38, édité 1 fois.
-

Patrice A. - WRInaute passionné

- Messages: 2415
- Inscription: 11 Fév 2005
Bonjour,
NoName, les variables globales dans une fonction c'est vraiment pas terrible, sers-toi plutôt d'un paramètre. Pour chercher le bug fais comme tout programmeur : mets des echo() pas à pas avec les valeurs des variables utilisées.
NoName, les variables globales dans une fonction c'est vraiment pas terrible, sers-toi plutôt d'un paramètre. Pour chercher le bug fais comme tout programmeur : mets des echo() pas à pas avec les valeurs des variables utilisées.
- charlynancy
- Nouveau WRInaute

- Messages: 11
- Inscription: 10 Mai 2005
Peux t - on se passer de la la base de données?
Théoriquement le système de mise cache permet donc de travailler avec la base de données inactive.
Si ce que je viens de dire n'est pas une infame connerie, la mise en cache présente un énorme intérêt m^me sur un serveur mutualisé.
En effet, sur un serveur mutualisé, lorsqu'un barbare cohabite et met la base OUT, avec un script à la morre moi le noeud, ça permet d'avoir son site toujours actif.
Pouvez vous me confirmer que ça permet bien de faire tourner le site sans base de donnée (une fois les pages mises en cache bien sur)???
Si ce que je viens de dire n'est pas une infame connerie, la mise en cache présente un énorme intérêt m^me sur un serveur mutualisé.
En effet, sur un serveur mutualisé, lorsqu'un barbare cohabite et met la base OUT, avec un script à la morre moi le noeud, ça permet d'avoir son site toujours actif.
Pouvez vous me confirmer que ça permet bien de faire tourner le site sans base de donnée (une fois les pages mises en cache bien sur)???
- charlynancy
- Nouveau WRInaute

- Messages: 11
- Inscription: 10 Mai 2005
coment exclure certaine page du système de mise en cache
Vos explications sont tellement bien faites que je ne suis plus foutu de réfléchir moi même.
Voila mon probème j'ai dans mes pages un formulaires de recherche qui renvoie vers une page résultat qui bien sur n'est jamais la même.
Bref comment mettre un test avant le script de mise en cache pour qu'on affiche directement cette page sans passer par le cache.
Voila mon probème j'ai dans mes pages un formulaires de recherche qui renvoie vers une page résultat qui bien sur n'est jamais la même.
Bref comment mettre un test avant le script de mise en cache pour qu'on affiche directement cette page sans passer par le cache.
- dcz
- WRInaute impliqué

- Messages: 723
- Inscription: 2 Mar 2005
et voilà du code qui va changer la donne concernant phpbb :
http://www.webrankinfo.com/forums/viewtopic_38997.htm
on pourra plus dire qu'il est trop lent comme ça
++
http://www.webrankinfo.com/forums/viewtopic_38997.htm
on pourra plus dire qu'il est trop lent comme ça
++
-

SuperPJ - WRInaute impliqué

- Messages: 513
- Inscription: 15 Jan 2005
Le script de Fandecine est tout simplement énooooooooorme ! J'ai rarement vu un code aussi important qui soit aussi facile à intégrer. Bravo
Jusqu'à présent pour la mise en cache je concaténais la variable $html qui contient le code à afficher avant de décider à la fin de faire un "echo" ou un fwrite puis un "echo", mais il est clair que la fonction ob_start() est beaucoup plus pratique ! Elle a été créée sur mesure pour la mise en cache
Jusqu'à présent pour la mise en cache je concaténais la variable $html qui contient le code à afficher avant de décider à la fin de faire un "echo" ou un fwrite puis un "echo", mais il est clair que la fonction ob_start() est beaucoup plus pratique ! Elle a été créée sur mesure pour la mise en cache
-

fandecine - Modérateur

- Messages: 2047
- Inscription: 2 Avr 2005
Ohax a écrit:comment faire pour ne pas mettre en cache une partie précise de la page ?
En fait tu met le code de début du cache là ou tu veux que démarre la mise en cache, et le code de fin, là où tu veux que cela se termine.
Si ton site utilise des DIV absolus, tu peut même supperposer sur la partie en cache des choses qui ne le sont pas (j'utilise cette technique pour mes banières de pub, ce qui m'evite d'effacer le cache quand je veux changer un tag).
En ce qui concerne le MOD pour PHPBB, il utilise une autre technique qui consiste à mettre en cache les requetes MYQL.
-

fandecine - Modérateur

- Messages: 2047
- Inscription: 2 Avr 2005
j'ai commencé à écrire une solution de mise en cache pour PHPBB que je teste actuellement. Il me reste quelques mises au point à faire (c'est assez long car j'ai peu de tempsc à y consacrer et le code PHPBB ne m'est pas famillier)
je publierais tout cela lorsque ce sera terminé et fiabilisé.
je publierais tout cela lorsque ce sera terminé et fiabilisé.
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 3 invités
