Unlink() et images persistante
Résolu
-Belial-
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Flachy Joe Messages postés 2102 Date d'inscription Statut Membre Dernière intervention -
Flachy Joe Messages postés 2102 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je débute en php et j'essaye de faire un truc tout simple qui pourtant s'entête à ne pas marcher.
j'explique :
je veux permettre le changement d'une imageA précédemment postée en chargeant une imageB à sa place.
Quand on clique sur le bouton "modifier" associé à l'imageA on est dirigé vers une page formulaire avec un
<input name="image" type ="file"/> permettant de charger une autre image à sa place.
Chaque image chargée voit son nom supprimé et changé en id_du_post.png
(pour le post 1 : 1.png; le 2 : 2.png etc)
Dans la page de réception des variables du formulaire grâce à un unlink("chemin de l'image A") cette dernière est effacée.
Ensuite j'insère le chemin de l'image B dans la base de donnée à la place du chemin du chemin de l'image A.
Et au final(après les verif d'usage) j'affiche la nouvelle imageB
donc pour résumer donne donc un truc comme ça :
1 - connexion à la db
2 - récupération des données selon l'id du post dans un array
3 - récupération du chemin de imageA
4 - je la supprime : unlink("chemin de l'image A")
5 - je renome et envoie l'image B dans le dossier (imageB a donc le même nom que l'ancienne imageA id_du_post.png)
6 - j'affiche l'imageBet.
Dans l'absolu tout ce passe bien, l'imageA est bien supprimée et remplacée par l'image B dans le dossier du serveur.
Là où ça pose problème (bah vi si tout marchait je serai pas là :p ), c'est que quand j'affiche la nouvelle image à la fin (donc l'imageB), on voit l'imageA (alors qu'elle est belle et bien supprimée du serveur et remplacée par l'imageB).
Je me suis dit qu'elle devait rester enregistrée quelque part dans les méandres du navigateur et que, comme il voyait la même adresse (car la nouvelle imageB et l'ancienne imageA ont toutes les deux le même nom id_du_post.png), il ne se faisait pas chier à recharger la nouvelle et utilisait déjà celle chargée (imageA donc). De plus même quand je quitte la page de traitement pour revenir à la page d'affichage du post en entier, le navigateur me remet encore l'imageA, jusqu'à ce que je quitte le site et revienne pour enfin avoir l'imageB affichée...
Donc la question à 1000 euro est : est-ce qu'il y a un moyen de supprimer également l'imageA du cache du navigateur ou de le forcer à ne pas faire le feignant et à recharger l'imageB même si elle a le nom et le chemin de l'imageA déjà chargée ?
OUF merci à ceux qui ont eu le courage de lire jusqu'ici :]
je débute en php et j'essaye de faire un truc tout simple qui pourtant s'entête à ne pas marcher.
j'explique :
je veux permettre le changement d'une imageA précédemment postée en chargeant une imageB à sa place.
Quand on clique sur le bouton "modifier" associé à l'imageA on est dirigé vers une page formulaire avec un
<input name="image" type ="file"/> permettant de charger une autre image à sa place.
Chaque image chargée voit son nom supprimé et changé en id_du_post.png
(pour le post 1 : 1.png; le 2 : 2.png etc)
Dans la page de réception des variables du formulaire grâce à un unlink("chemin de l'image A") cette dernière est effacée.
Ensuite j'insère le chemin de l'image B dans la base de donnée à la place du chemin du chemin de l'image A.
Et au final(après les verif d'usage) j'affiche la nouvelle imageB
donc pour résumer donne donc un truc comme ça :
1 - connexion à la db
2 - récupération des données selon l'id du post dans un array
3 - récupération du chemin de imageA
4 - je la supprime : unlink("chemin de l'image A")
5 - je renome et envoie l'image B dans le dossier (imageB a donc le même nom que l'ancienne imageA id_du_post.png)
6 - j'affiche l'imageBet.
Dans l'absolu tout ce passe bien, l'imageA est bien supprimée et remplacée par l'image B dans le dossier du serveur.
Là où ça pose problème (bah vi si tout marchait je serai pas là :p ), c'est que quand j'affiche la nouvelle image à la fin (donc l'imageB), on voit l'imageA (alors qu'elle est belle et bien supprimée du serveur et remplacée par l'imageB).
Je me suis dit qu'elle devait rester enregistrée quelque part dans les méandres du navigateur et que, comme il voyait la même adresse (car la nouvelle imageB et l'ancienne imageA ont toutes les deux le même nom id_du_post.png), il ne se faisait pas chier à recharger la nouvelle et utilisait déjà celle chargée (imageA donc). De plus même quand je quitte la page de traitement pour revenir à la page d'affichage du post en entier, le navigateur me remet encore l'imageA, jusqu'à ce que je quitte le site et revienne pour enfin avoir l'imageB affichée...
Donc la question à 1000 euro est : est-ce qu'il y a un moyen de supprimer également l'imageA du cache du navigateur ou de le forcer à ne pas faire le feignant et à recharger l'imageB même si elle a le nom et le chemin de l'imageA déjà chargée ?
OUF merci à ceux qui ont eu le courage de lire jusqu'ici :]
A voir également:
- Unlink() et images persistante
- Des images - Guide
- Images enregistrées - Forum Gravure
- Extraire images pdf - Guide
- Les images enregistrées n'apparaissent plus - Forum Bureautique
- Recherche images - Guide
3 réponses
Salut,
en effet l'image d'origine reste dans le cache du navigateur.
Tu peux utiliser les entêtes HTML pour empêcher que ton image soit mise en cache :
en effet l'image d'origine reste dans le cache du navigateur.
Tu peux utiliser les entêtes HTML pour empêcher que ton image soit mise en cache :
<?php header ('content-type : image/png'); header ('cache-control : no-store, no-cache, must-revalidate'); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); readfile('ton/image.png'); ?>
Alors en fait,
utiliser un header() semblait une bonne solution, mais un peu complexe pour mon niveau x]
Mais je garde tout ça sous le coude pour un futur apprentissage.
J'ai résolu le problème en utilisant un
<img src="image.png?reload=<?=time();?>" alt="...">
qui me permet de tout garder sur une seule page :p
Merci quand même Joe ^^'
utiliser un header() semblait une bonne solution, mais un peu complexe pour mon niveau x]
Mais je garde tout ça sous le coude pour un futur apprentissage.
J'ai résolu le problème en utilisant un
<img src="image.png?reload=<?=time();?>" alt="...">
qui me permet de tout garder sur une seule page :p
Merci quand même Joe ^^'
C'est astucieux cette utilisation d'un paramètre dans l'URL pour leurrer le cache, je le note moi aussi.
A+
Bonne continuation.
PS : fait gaffe avec les "<?=" qui ne sont pas acceptés par tous les serveurs, ça serait dommage que ton site soit mis en rideau par une simple mise à jour de la part de ton hébergeur. C'est un peu plus long à taper mais beaucoup plus propre d'utiliser <?php echo ... ; ?>
A+
Bonne continuation.
PS : fait gaffe avec les "<?=" qui ne sont pas acceptés par tous les serveurs, ça serait dommage que ton site soit mis en rideau par une simple mise à jour de la part de ton hébergeur. C'est un peu plus long à taper mais beaucoup plus propre d'utiliser <?php echo ... ; ?>