Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2008, 16h28   #1
Membre à l'essai
 
Inscription : avril 2003
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 83
Points : 22
Points : 22
Par défaut Gérer la mise en cache d'un fichier XML

Bonjour,

J'ai sur mon site un générateur de flux RSS/ATOM (PHP4) qui fonctionne très bien, vu le succès et pour éviter de sur solliciter le processeur du serveur je souhaite mettre en cache le résultat de chaqu'une des requêtes (pas mal de paramètres sont possible) et si jamais la même requête est joué dans l'heure qui suit plutôt que de régénérer le flux le script doit aller chercher le fichier XML qui correspond et l'afficher.

Voici ce que j'ai fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$toto = $_SERVER['REQUEST_URI'];
$filename = "../xml/extern_".$toto.".xml"; // nom du fichier XML
 
if (file_exists($filename))
{
	if (time() - filemtime($filename) < 100) 
	{
		include $filename;
		exit; //on sort
	}
	else
		unlink($filename); 	//si fichier trop vieux on l'efface 
}
 
... // génération du fichier XML puis affichage

l'Include ne fonctionne pas ce qui est un peu normal, mais le pb c'est que je ne sais pas comment faire autrement ...

Je suis loin d'être un expert, mais peut-être existe t'il une autre méthode pour mettre en cache des flux ?

Je précise que je souhaite que l'url affiché soit bien l'adresse du script PHP et non pas l'adresse du fichier XML.


Merci
fpouget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 18h54   #2
Membre à l'essai
 
Inscription : avril 2003
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 83
Points : 22
Points : 22
bon j'ai trouvé

avec les headers pour que les flux restent conforme !!!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
if (file_exists($filename))
{
	if (time() - filemtime($filename) < 100) 
	{
		$handle = fopen($filename, "r");
		if ($handle)
		{
			header('Content-Type: text/xml');
			header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
			header('Pragma: public');
			while (!feof($handle))
			{
				$buffer = fgets($handle, 4096);
				echo $buffer;
			}
			fclose($handle);
		}
		exit;
	}
	else
		unlink($filename); 	//si fichier trop vieux on l'efface 
}
fpouget est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h43.


 
 
 
 
Partenaires

Hébergement Web