Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 18 September 2007 12:37

David_M
Juste Inscrit !
Date d'inscription: 18 Sep 2007
Messages: 2

[OpenLayers] Rafraichissement de la page !! Problème de caches navigat

Bonjour tout le monde !!

Je suis actuellement sur le dévellopement d'un site ou j'affiche des données géographiques sur une carte via navigateur web (des polygones en l'occurence).

J'utilise, pour cette réalisation:
- le logiciel OpenLayers pour afficher les données que je souhaite sur la carte (polygones ...)
- une base PostgreSQL pour stocker les données géographiques des points.
- le site est fait en HTML + php + javascript + gml/xml: à savoir que la page HTML me sert pour des logins/password; elle apelle ensuite ma page php qui affiche dans une carte les données géographiques contenues dans des fichiers xml ( le javascript ne sert juste qu'à afficher la carte ).

Tout marche bien aux premiers essais, cependant une grosse erreur intervient lorsque l'on réitère les opérations.

Je m'explique au travers d'un exemple: nous avons un fichier toto.xml et un fichier tata.xml qui sont différents et définissent des polygones totalement différents. On charge le polygone de toto.xml dans la carte; ça fonctionne correctement. On charge ensuite tata.xml dans la carte à la place de toto.xml; ça fonctionne correctement aussi.
Cependant maintenant on recopie l'intégralité de toto.xml dans tata.xml et on refait la même opération mais il charge l'ancien tata.xml. Donc, le fichier à bien été changé (on a vérifié qu'ils étaient bien identique) mais le navigateur recharge le tata.xml qu'il avait gardé en cache. Par contre lorsque l'on vide le cache manuellement tout refonctionne à merveille.

J'ai essayé plusieurs solutions qui n'ont pas abouties:

la solution de vidage de cache via HTML:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

la solution de vidage de cache via PHP:
<?php
header("Pragma: no-cache");
header("Expires: 0");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
?>

Il me reste la solution Cache_Lite qui est quand même très lourde à mettre en oeuvre:
include "Lite.php";
$Options_lite=Array("cacheDir"=>"/temp/");
$Cache_Lite=new Cache_Lite($Options_lite);
$Cache_Lite->clean("participations");

Comme cela elle à l'air légère mais lorsque l'on voit le pack Cache_Lite on comprend que cette solution est un peu lourde.
Je me réserve cette solution en vraiment dernier recours...



Je formule donc ma demande: Quelqu'un connaitrait-il une autre solution assez légère (comme un javascript par exemple ) pour effacer les fichiers mis en caches par le navigateur et cela automatiquement?


PS: Je ne savais pas exactement ou le mettre !! Je laisse aux adminsitrateurs le soin de déplacer mon post dans la section adéquate si nécessaire.

Merci d'avance ...

Hors ligne

 

#2 Tue 18 September 2007 13:13

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers] Rafraichissement de la page !! Problème de caches navigat

Bonjour,

Il doit y avoir un moyen de "détruire" la couche avec une fonction destroy() puis de la recharger. :

http://dev.openlayers.org/docs/files/Op … or.destroy :

destroy

    destroy: function()

Destroy this layer


Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Tue 18 September 2007 14:14

David_M
Juste Inscrit !
Date d'inscription: 18 Sep 2007
Messages: 2

Re: [OpenLayers] Rafraichissement de la page !! Problème de caches navigat

Je suis d'accord avec toi !! Il y a des moyens de détruire et recharger les couches ... Cependant il va toujours aller chercher ce fichier xml en cache au lieu de le prendre sur la base de données ... ma question se situe plus au niveau du javascript qu'au niveau de OpenLayers je penses; mais je vais quand même fouiller un peu vers ta solution voir s'il n'y a pas un moyen de TOUT régénérer

Merci.

Dernière modification par David_M (Tue 18 September 2007 14:15)

Hors ligne

 

#4 Mon 08 October 2007 19:22

gde
Participant occasionnel
Date d'inscription: 8 Oct 2007
Messages: 18

Re: [OpenLayers] Rafraichissement de la page !! Problème de caches navigat

Sans doute qu'une solution à déjà été trouvée, mais au cas ou, voilà une solution :

Il suffit de changer le nom à toto.xml à chaque appel avec un nom aléatoire (ex : toto-1243239.xml puis toto-2342334.xml, etc...). Les nom étant chaque fois différent, le fichier ne sera évidement pas dans le cache. Par contre, il faut designer le système pour pouvoir connaître le nom du fichier xml a appeler !

Le coup du header doit fonctionner, mais il faut que les instructions indiquées soient bien dans le fichier XML et non dans le fichier php qui y fait appel. En clair, cela veut dire que le fichier XML doit être généré par exemple par du PHP avec les header indiqué en entête. (ex : toto.php qui peut s'appeler xml si le serveur est configuré pour appeler le moteur php pour traiter des fichiers xml)

Un mixte des 2 solutions serait de générer le xml dans un fichier php et d'appeler le php avec un paramètre aléatoire (qui ne serait pas forcement utilisé dans le fichier php lui-même). Donc par exemple toto.php?id=293847293472397842389427398 (en mettant n'importe quoi après le id=, mais différent à chaque fois). Comme l'URL change à chaque fois, le fichier ne sera pas dans le cache.

En résumé, il faut travailler sur une solution qui empêche la mise en cache que sur une solution qui détruit le cache.

A mon avis, la solution cache_Lite ne fonctionne pas puisqu'elle vide le cache coté serveur, mais pas celui du coté client. Le xml peut être caché du côté client suivant comment le système est designé.

Le coup de la destruction des couches ne fonctionne effectivement pas puisque la fonction ne détruit pas le cache du navigateur non plus !

Hors ligne

 

Pied de page des forums

Powered by FluxBB