Temps d'apparition d'une image

Résolu/Fermé
Signaler
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
-
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
-
Bonjour,



Je dispose sur mon espace web de différentes photos.
J'appelle celles-ci tout simplement par un
<img src ="<?php echo $chemin;?>" alt ="image" width="60px" height="60px" >

$chemin étant le chemin absolu pour parvenir à la photo désirée.
1°) Je charge la photo ---> Tout se passe bien
2°) Je supprime la photo dans le répertoire ----> elle est toujours là avec le img src =
3°) j'essaye d'accéder directement dans le répertoire en donnant l'adresse dans mon navigateur ---> la photo est bien entendue absente (puisque je l'ai enlevée)
Par contre, elle est toujours appelée par 'img src =' ???
Il faut environ 5 minutes pour que la photo disparaisse.
Je pense donc qu'il y a une mémoire tampon qui garde en mémoire la photo.
Quelqu'un a-t-il une idée pour effacer cette mémoire tampon qui a l'air de n'agir que sur les photos ...

Merci de votre réponse.

EDIT: Ajout de la coloration syntaxique.


4 réponses

Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021
3 859
Bonjour,
Une fois que tu as supprimé l'image de ton répertoire .... rafraichis tu ta page (celle qui contient les liens ) ???
Car sinon.. tant que la page est affichée... le lien existe !
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
Merci de ta contribution jordane45.
Il ne s'agit pas de rafraichissement de la page, j'ai bien sûr systématiquement rafraichi la page. Mieux même, je ferme mon navigateur complètement, et le rallume disons 30 secondes après, après avoir vidé complètement le cache du navigateur ----> même résultat.
Au bout de 5 minutes (environ) la modification de l'image apparait.
Je suppose donc qu'il existe un cache sur le serveur qui garde en mémoire je ne sais quoi, mais qui s'efface de lui-même au bout d'un certain temps.
Une idée ? merci d'avance.
Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021
3 859
Comment alimentes tu ta variable $chemin ?
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
ma variable $chemin est le chemin absolu pour aller chercher ma photo.
$dossier = $donnees['Prenom'].$donnees['Nom'];
$chemin = '/Photosmembres/'.$dossier.'/M.jpg';
Photomembres est à la racine du site : http://www.monsite/Photomembres
?>
<img src ="<?php echo $chemin;?>" alt ="image" width="60px" height="60px" >
Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021
3 859
Oui ok...
mais ça vient d'une requête ??
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3 >
Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021

oui, bien sûr
Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021
3 859
Bon....
Va falloir que tu sois un peu plus volubile .....

C'est un peu fatiguant de devoir quémander les informations.. que tu ne distilles que petits bouts par petits bouts ...

Donc :

- Quelle requête ?
-->> A la limite... montres nous le code COMPLET de ta page !

- Quand tu supprimes l'image... tu la supprime où et comment ?

- La requête qui t'affiches tes images ... va chercher les infos où ?
(dans une BDD ?? )
- Comment la BDD est-elle mise à jour ? (c'est automatique ou bien un autre script tourne (toutes les 5 minutes....) pour mettre à jour les infos ????





Cordialement,
Jordane
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
Excuse-moi, je vais essayer d'être plus clair dans mes explications.
J'ai un site composé de fichiers html ou php, plus une base de données.
Dans le problème que j'ai à résoudre, la base de données n'entre pas en ligne de compte pour ce problème de photos.
Je stocke mes photos comme de simples fichiers .jpg dans un répertoire dénommé Photosmembres et qui se trouve à la racine du site.
L'adresse d'une photo est donc : http://www.monsite/Photomembres/mondossier/maphoto.jpg
Lorsque je fais une requête, je vais chercher divers renseignements situés soit dans la bdd pour des renseignements divers, soit dans les fichiers photos situés dans le répertoire Photosmembres.
La requête est la suivante :
<?php
session_start();
header( 'content-type: text/html; charset=utf-8' );
if (isset($_COOKIE['monerp']) AND isset($_COOKIE['mon'])) {
  $_SESSION['prenom'] = $_COOKIE['monerp'];
  $prenom = $_COOKIE['monerp'];
  $_SESSION['nom'] = $_COOKIE['mon'];
  $nom = $_COOKIE['mon'];

  ?><p style = "color : yellow;"><?php
  
  try {
   $bdd = new PDO('mysql:host=monsite.fr.mysql;dbname=monsite', 'YYYYY', 'XXXXXX', array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  }
  catch(Exception $e) {
   die('Error : ' . $e->getMessage());
  }
   $reponse = $bdd->prepare("SELECT * FROM identite WHERE Nom = :nvnom AND Prenom = :nvprenom");
   $reponse->execute(array(
    'nvnom' => $_SESSION['nom'], 
    'nvprenom' => $_SESSION['prenom']
    ));
   $donnees = $reponse->fetch();
   
   if($donnees['membre'] == 0){
    echo "Désolé : Vous n'avez pas accès à ces données";
   }else{
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd]">
    <html xmlns="[http://www.w3.org/1999/xhtml]" xml:lang="fr" lang="fr">
    <head>
     <title>coordonnees membres</title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />   
     <meta http-equiv="Expires" content="0" />
     <link rel="stylesheet" href= "position.css" />
    </head>
    <body><?php
   }
   if(isset($_POST['liste'])){
    $id = $_POST['liste'];
    $reponse = $bdd->prepare("SELECT * FROM identite WHERE id = :nvid");
    $reponse->execute(array(
    'nvid' => $id
    ));
    $donnees = $reponse->fetch();
    $telephone = $donnees['Telephone'];
    
    if($donnees['deces']== 0){
    echo $donnees['Prenom'].' '.$donnees['Nom'];
     if($donnees['PF'] == 1){
      echo ' PRESIDENT FONDATEUR';
     }?><br><?php
    echo $donnees['Adresse'].' ';
    echo $donnees['CP'].' '.$donnees['Ville'];?><br><?php
    }
    
    if(!empty($donnees['Tel'])){
    $rest1 = substr($donnees['Tel'], 0, 2);
    $rest2 = substr($donnees['Tel'], 2, 2);
    $rest3 = substr($donnees['Tel'], 4, 2);
    $rest4 = substr($donnees['Tel'], 6, 2);
    $rest5 = substr($donnees['Tel'], 8, 2);
    echo 'Téléphone : ';?><span class="coordonnees"><?php echo $rest1.' '.$rest2.' '.$rest3.' '.$rest4.' '.$rest5;?></span><br><?php
    }
    if(!empty($donnees['Portable'])){
    $port1 = substr($donnees['Portable'], 0, 2);
    $port2 = substr($donnees['Portable'], 2, 2);
    $port3 = substr($donnees['Portable'], 4, 2);
    $port4 = substr($donnees['Portable'], 6, 2);
    $port5 = substr($donnees['Portable'], 8, 2);
    echo 'Portable : ';?><span class="coordonnees"><?php echo $port1.' '.$port2.' '.$port3.' '.$port4.' '.$port5;?></span><br><?php
    }
    echo 'Mail : '.$donnees['Mail'];?><br>
    _____________________________________________<br>
    <?php
    $dossier = $donnees['Prenom'].$donnees['Nom'];
    $chemin1 = '/Photosmembres/'.$dossier.'/M.jpg';
    $chemin2 = '/Photosmembres/'.$dossier.'/F.jpg';
    //echo $chemin1;echo'<br>';
    //echo $chemin2;echo'<br>';
    ?>
    <img src ="<?php echo $chemin1;?>" alt ="époux" width="60px" height="60px" >    
    <img src ="<?php echo $chemin2;?>" alt ="épouse" width="60px" height="60px" >    
    _____________________________________________<br>
    
   }else{ 
    echo 'Bonjour '.$prenom.' '.$nom.'.';?><br><br><?php
    echo 'Pour avoir les coordonnees des membres ';?><br><br><?php
    echo 'Liste des membres actifs.'?><br><?php 
    echo 'Cliquez sur un membre';?><br><?php
    $reponse = $bdd->prepare("SELECT * FROM identite WHERE lion = 1 ORDER BY Nom");
    $reponse->execute(array(
    'nvnom' => $_SESSION['nom'], 
    'nvprenom' => $_SESSION['prenom']
    ));
    $i = 1;
    ?>
    <FORM  action="#" method="post" name="type" />
     <SELECT  name="liste" size="30" style="background-color:#00FFFF;" onchange="document.type.submit();">
      <?php
      WHILE ($donnees = $reponse->fetch())
      {
      if($donnees['deces'] == 0 AND $donnees['parti']== 0){
       $id{$i} = $donnees['id'];?>
       <option value = "<?php echo $id{$i};?>" > <?php echo $donnees['Prenom'].' '; echo $donnees['Nom']; ?></option>
       <?php
      }
       $i = $i +1;
      }
      ?>
     </SELECT>
    </form>
    <?php
   }
}else{
echo 'Désolé, les cookies ne sont pas activés sur votre ordinateur';
}



Je fais une liste des membres. Je poste un membre de cette liste. Dans la condition POST(liste) j'identifie le membre, puis je vais chercher dans la base de données le nom et le prénom du membre pour me permettre de trouver le dossier dans lequel se trouvent les photos de époux et épouse.
A partir de là, je demande simplement l'affichage des photos que je vais chercher dans le répertoire Photosmembres/mondossier/maphoto.jpg
Et c'est là que j'ai le problème.
A la première requête, tout se passe bien, les photos s'affichent.
Si je supprime la photo manuellement dans le répertoire, à la requête suivante, elle est encore là. Il faut attendre au moins 5 minutes avant qu'elle n'apparaisse plus avec la requête.
idem, si je change la photo manuellement, le changement ne se fait qu'au bout de 5 minutes, alors que le fichier est bien chargé.
On dirait que le serveur garde en mémoire tampon la photo.
Ce n'est pas mon navigateur, je m'applique à vider sa mémoire tampon à chaque requête.

J'espère avoir été plus clair dans mes explications, merci de ta compréhension.


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.
Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021
3 859
Donc pour résumer (ou reformuler...)

- Tu as des photos dans des dossiers (dont le nom est composé du prénom et du nom de personnes)
- Tu supprimes manuellement une image d'un de ces dossiers
- Il apparait toujours sur ta page même après refresh de ta page


... A la limite... je pense qu'un teste sur l'existence du fichier avant de l'afficher devrait résoudre ton souci.


 $dossier = $donnees['Prenom'].$donnees['Nom'];
    $chemin1 = '/Photosmembres/'.$dossier.'/M.jpg';
    $chemin2 = '/Photosmembres/'.$dossier.'/F.jpg';
 if(file_exists($chemin1){
   echo "<img src ='$chemin1' alt ='époux' width='60px' height='60px' >";
 }

 if(file_exists($chemin2)){
   echo "<img src ='$chemin2' alt ='épouse' width='60px' height='60px' >";
}


Après... pour ce qui est d'un éventuel cache sur le serveur... aucune idée.
Et puis... il faudrait éventuellement indiquer sur quoi tu héberges ton site....

Éventuellement.... as tu testé en LOCAL (via un WAMP par exemple...) si le souci existe également ?


Messages postés
34228
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 décembre 2021
3 859
Tu peux aussi essayer d'ajouter ça dans les balises HEAD de ta page html
<meta http-equiv="Cache-Control" content="no-store" />
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
Tu as très bien compris la problématique. Excuse-moi pour les explications embrouillées.
Merci pour ces pistes de réflexion. J'espère trouver la faille.
Je m'absente aujourd'hui. Je te tiendrai au courant si je trouve le bug.
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3
Bon, je pense que je faisais fausse route dans l'idée de dire que la photo mettait "un certain temps" à apparaître ou à disparaître.
Ta suggestion de mettre une condition dans l'existence du fichier m'a finalement indiqué que celle-ci était systématiquement fausse, alors que le fichier existait bien.
La raison était tout simplement dans l'adresse du chemin qui était mal précisée.
J'avais indiqué : $chemin1 = '/Photosmembres/'.$dossier.'/M.jpg';
alors qu'il faut mettre : $chemin1 = 'Photosmembres/'.$dossier.'/M.jpg'; (sans slash au début)
Je n'ai pas bien approfondi le fonctionnement de ce slash qui pour moi représentait la racine du site...!.. En tous cas, le problème est bien résolu.
Merci pour ton aide qui a été efficace, malgré l'explication du phénomène que j'ai eu du mal à expliquer.
Bonsoir et à une autre fois peut-être.
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015
3 >
Messages postés
148
Date d'inscription
vendredi 17 mai 2013
Statut
Membre
Dernière intervention
29 août 2015

Je reviens sur mon problème.
En fait, j'avais plusieurs erreurs en même temps dans mon script.
1°) la syntaxe du chemin de mon fichier n'était pas bonne (résolu avec la condition if(file_exists() ).
2°) aussi un problème de cache du navigateur lors des modifications d'images, que je suis en train de résoudre.

Comme quoi, la définition d'un comportement bizarre d'une requête n'est pas toujours facile à expliquer !.......