Avatar billede cmau Nybegynder
14. oktober 2007 - 21:10 Der er 14 kommentarer og
1 løsning

Kan php sætte udløbsdato på billeder

Hej derude

Er det muligt, via php, at sætte en udløbsdato på et billede, så browseren ikke loader billedet hver gang den kommer ind på siden?
Avatar billede gf Nybegynder
14. oktober 2007 - 22:10 #1
Hej

Du kan, hvis du oploader billederne til din side, lægge nogle info ind i en db samtidig. Evt en upload dato og en udløbs dato og navnet på billedet. Så kan du på den måde få browseren til at vise de billeder hvor udløbsdatoen er mindre end den nuværende dato.

håber det giver mening.

Hvis du selv lægger billederne op via ftp kunne du navngive bilederne med dato.jpg og sætte php til at vise billederne jfr. beskrivelsen foroven.

mvh gf
Avatar billede cmau Nybegynder
15. oktober 2007 - 12:24 #2
Tror ikke du har forstået.


Nu bruger jeg FF, så forklare det dertil. Hvis man højreklikker på en side og vælger "Vis sideoplysninger" og vælger "Medie" og tager et af billederne, kan man se, at de har en udløbsdato. Denne dato er hvornår browseren skal reloade billedet, altså hvorlangtid den skal gemmes på computeren.

Det denne udløbsdato jeg vil vide om jeg kan sætte med php, da jeg lige nu har MEGET trafik pga. folk loader det samme billede mange gange om dagen.
Avatar billede coderdk Praktikant
15. oktober 2007 - 17:20 #3
Du kan, hvis du henter billedet igennem et script... Ellers skal du sætte noget cache control i webserverens opsætning
Avatar billede cmau Nybegynder
15. oktober 2007 - 20:46 #4
jeg henter billedet gennem et script. Hvordan kan jeg så gøre det?
Avatar billede coderdk Praktikant
15. oktober 2007 - 23:49 #5
F.eks. ved at sende en nogle headers... F.eks:

header("Cache-Control: private");
header("Last-Modified: " . date("r", filemtime("/sti/til/din/fil.jpg"));

og så resten, i.e. content-type, content-length, content-disposition etc
Avatar billede cmau Nybegynder
16. oktober 2007 - 10:19 #6
Hej igen.

Jeg kom til at se på php's side omkring header som du også siger jeg skal bruge.

Hvordan ville denne kunne skives omvendt?
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

Datoen sætter jeg selvøflgelig om, det mere cache control.
Avatar billede coderdk Praktikant
16. oktober 2007 - 11:16 #7
Det er stort set det jeg har skrevet, her sætter jeg bare Last-Modified i stedet for Expires - Har du prøvet det jeg har skrevet? Det burde virke...
Avatar billede cmau Nybegynder
16. oktober 2007 - 11:51 #8
Men så skal det vel også være andet end date("r", filemtime("/sti/til/din/fil.jpg") da brugeren helst ikke skal hente billedet mere end en gang.
Avatar billede coderdk Praktikant
16. oktober 2007 - 12:20 #9
Nej, "Last-Modified" bliver så filens oprettelses/ændringsdato - Det er så meningen, at browseren skal cache billedet, og kun hente et nyt, hvis datoen er ændret...
Avatar billede cmau Nybegynder
20. oktober 2007 - 17:51 #10
ja men vi vil jo have tingene til at udløbe i 2010.
Avatar billede coderdk Praktikant
27. oktober 2007 - 11:19 #11
Ok, jamen så brug header("Expires: " . date("r", mktime(0,0,0,1,1,2010))); i stedet for Last-Modified - Men hvorfor ikke bare bruge last-modified? Så bliver billedet hentet igen hvis du uploader et nyt.
Avatar billede cmau Nybegynder
05. januar 2008 - 20:33 #12
Tak vil du smide et svar?
Avatar billede cmau Nybegynder
05. januar 2008 - 20:34 #13
Lige en ting. Måden vi laver billederne på er gennem en fil med et id. Sørger den så for , at hvert billede er forskelligt? Altså at den ikke kun henter den med id 1 også viser det samme for 2 3 osv
Avatar billede coderdk Praktikant
05. januar 2008 - 20:41 #14
Tjah, det er jo op til dig, du skal skrue scriptet sammen så den f.eks. tager ID som parameter, f.eks. noget i stil med:

<?php

header("Cache-Control: no-cache, must-revalidate");
header("Expires: " . date("r", mktime(0,0,0,1,1,2010)));

$BILLEDE_DIR = 'billeder/';
$id = !empty( $_GET['id'] ) ? intval( $_GET['id'] ) : 0;

$f = $BILLEDE_DIR . basename( $id ) . ".jpg";
if ( !file_exists( $f ) )
{
  die("404 Fil ikke fundet");
}

header("Content-Type: image/jpeg");
readfile( $f );

?>
Avatar billede cmau Nybegynder
27. januar 2008 - 22:10 #15
tak! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester