Toon posts:

[php] Plaatje uit cache verwijderen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb met php dat je een plaatje kan uploaden alleen nu kun je dus een plaatje uploaden en dat overschrijft een ander plaatje alleen als je dan terug gaat naar het overzicht dan zie je nog steeds dat oude plaatje terwijl je die pagina wel gewoon opnieuw hebt aangeroepen alleen als je refresh doet dan krijg je het nieuwe plaatje te zien.

Dit komt volgens mij omdat hij het oude plaatje wat dezelfde naam heeft nog in zijn geheugen heeft staan maar hoe doe ik refresh met php / html ik weet dat je in vba iets hebt als .requery of . recalc maar zoiets heb je bij mijn weten in php niet.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
code:
1
2
3
4
5
6
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                     // always modified
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");               // HTTP/1.0

http://www.php.net/manual/en/function.header.php

Verwijderd

Topicstarter
Bedankt voor de tip maar dat is het dus niet. Ik heb meteen al die header functies ff bekeken maar daar zat niets tussen.

  • Glock
  • Registratie: November 2001
  • Niet online
Dit moet wel met die headers, als je de headers toevoegt die orphix hier post moet het gewoon opnieuw worden geladen.

  • Pastinakel
  • Registratie: December 2000
  • Laatst online: 22:39

Pastinakel

Zwammen en kwazoedels

Wat ik meestal doe is het plaatje vanaf de pagina aanroepen met de huidige timestamp als get-parameter. Werkt prima.

Dus in PHP:
PHP:
1
2
3
<?
echo "[img]'plaatje.gif?ts=".time()."'>";
?[/img]

Het plaatje krijgt dan na uploden een andere parameter mee als voorheen en de browser zal het plaatje refreshen.

Ik kan je niet helpen. De frutsel is warrig en niet knopig. Bovendien heb ik maar één kant | Scrobblernakel


Verwijderd

da's niet netjes :)
pleur die headers van Orphix bovenin je pagina (alle headers) en het werkt. Het kan ook zijn dat je de terug knop in de browser gebruikt, dan wordt de pagina namelijk niet opnieuw aangeroepen maar uit het geheugen van je computer gehaalt, waar het nieuwe plaatje dus nog niet is opgeslagen...

  • Pastinakel
  • Registratie: December 2000
  • Laatst online: 22:39

Pastinakel

Zwammen en kwazoedels

Op zondag 10 februari 2002 19:58 schreef jurriebur het volgende:
da's niet netjes :)
...
Waarom is dat niet netjes? :?

Ik kan je niet helpen. De frutsel is warrig en niet knopig. Bovendien heb ik maar één kant | Scrobblernakel


Verwijderd

het is niet netjes om aan een img een var door te geven die je niet gebruikt... aangezien het ook veel beter/onzichtbaarder kan, vind ik dit geen nette optie...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Weet je trouwens zeker dat die header op alles van de pagina slaat, en niet alleen op de html. Ik zou eerder denken aan een no-cache header voor de image.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
Ik vind het geen van beide een nette oplossing. Door zulke headers toe te voegen moet je telkens alles opnieuw moet binnenhalen. Is langzaam dus irritant voor de gebruiker en kost je server veel dataverkeer (en wellicht dus centjes).

Netter is om gewoon enkel dat geuploade plaatje in de cache te refreshen. Dus na de submit een pagina laten tonen met de genoemde headers, een tekst "een moment alstublieft", een <IMG SRC>-code met het net geuploade plaatje, en een redirect naar de pagina die je anders na het uploaden laat zien, hetzij via een meta-refresh, hetzij via een <IMG onLoad>. Zal het probleem in 99,5% van de keren oplossen, met nauwelijks extra dataverkeer.

Ik spoor veilig of ik spoor niet.


  • Pastinakel
  • Registratie: December 2000
  • Laatst online: 22:39

Pastinakel

Zwammen en kwazoedels

Dat bedoelde ik ook (maar ik zei het niet expliciet):

1. Plaatje uploaden middels een form.
2. Als alles goed is gegaan een pagina met "Het plaatje is geupload" en daaronder het plaatje met die tijd-parameter.
3. Een redirect naar de pagina waar men vandaan kwam, waar het plaatje zonder parameters aangeroepen staat.

Ik vind dat best een nette manier want je refresht alleen de content die je wilt refreshen en niet de gehele HTML.
Als je cache-control- of pragma-headers gebruikt, refresh je de hele pagina (=> extra dataverkeer).
Als je onLoad gebruikt, ben je weer afhankelijk van JavaScript (en JavaScript kan uitstaan of gefilterd worden).

Ik kan je niet helpen. De frutsel is warrig en niet knopig. Bovendien heb ik maar één kant | Scrobblernakel


  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
Op maandag 11 februari 2002 13:12 schreef Niep het volgende:
Dat bedoelde ik ook (maar ik zei het niet expliciet):

1. Plaatje uploaden middels een form.
2. Als alles goed is gegaan een pagina met "Het plaatje is geupload" en daaronder het plaatje met die tijd-parameter.
3. Een redirect naar de pagina waar men vandaan kwam, waar het plaatje zonder parameters aangeroepen staat.
Dat was ook mijn eerste gedachte, maar dit werkt niet. Het plaatje met parameter heeft een andere url dan het plaatje zonder parameter, en het wordt in de cache dan ook niet overschreven: wanneer je het plaatje vervolgens zonder die tijd-parameter oproept, krijg je het oude plaatje weer te zien. Test maar.
Ik vind dat best een nette manier want je refresht alleen de content die je wilt refreshen en niet de gehele HTML.
Als je cache-control- of pragma-headers gebruikt, refresh je de hele pagina (=> extra dataverkeer).
Als je onLoad gebruikt, ben je weer afhankelijk van JavaScript (en JavaScript kan uitstaan of gefilterd worden).
Dat is beide waar, maar bedoel je nou dat bezoeker zelf die plaatjes upload? Als het de admin is kun je in dat specifieke geval toch eenvoudig als voorwaarde stellen dat javascript aanstaat. Desnoods geef je een gewone aanklikbare link erbij voor het geval je een koppige admin hebt.

Ik spoor veilig of ik spoor niet.


  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Op zondag 10 februari 2002 17:45 schreef Orphix het volgende:
code:
1
2
3
4
5
6
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
                                     // always modified
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");               // HTTP/1.0

http://www.php.net/manual/en/function.header.php
Voor de duidelijkheid.. deze headers meegeven bij het sturen van het plaatje niet de html file.. enige nadeel is dat je wel steeds al je plaatjes refreshed (als je ze bij allemaal meegeeft)

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


Verwijderd

Topicstarter
Ik heb dit probleem nog steeds die headers werken echt niet al zet ik ze bovenaan iedere pagina.

Het gaat dus om het probleem dat je een plaatje upload en een ID geeft (3.gif bijv). Vervolgens kun je dit plaatje bewerken en dan verwijderd hij het oude plaatje op de server (unlink) en voegt een nieuwe toe onder dezelfde ID.

Je hebt dus een ander plaatje met dezelfde naam, als ik dit dan oproep dus Afbeeldingslocatie: http://3.gif dan krijg ik het oude plaatje.

Dan druk ik op F5 en het is goed alleen dit moet dus automatisch. Iemand ander idee??

bij VB heb je iets als .refresh

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

je moet ze ook niet bovenaan de pagina zetten, maar voor de output van de afbeelding (door bv. de afbeelding door PHP uit te late poepen)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
                                     // always modified
header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");               // HTTP/1.0
echo "[img]2.jpg[/img]";

Dit werkt dus niet.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 03 april 2002 16:51 schreef extrafriss het volgende:
Dit werkt dus niet.
En dat is nogal logisch...
Lees de reactie van chem nog eens door.

Verwijderd

Topicstarter
???

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:39
Op woensdag 03 april 2002 17:08 schreef extrafriss het volgende:
???
|:(
PHP:
1
<?$ext = substr($filename, -3);header("Content-type: image/".$ext);header("Cache-Control: no-cache, must-revalidate"); $file = fopen($filename,"r"); fpassthru($file);?>

En dan aanroepen met bestandsnaam.php?filename=plaatje.gif, en plaatje.gif moet dan in dezelfde directory staan.

Nu heb ik je genoeg geholpen.
Pagina: 1