[GD] iedere keer dezelfde foto opnieuw laden?
Ik heb een php script gemaakt dat iedere foto nu een propere url heeft en dat deze altijd de juiste afmeting heeft. Wanneer deze nog niet bestaat zal hij deze maken en opslaan in de "case" map, het is dus niet iedere keer on the fly.
Volgens mijn inspector gegevens (chrome) worden de foto's iedere keer ingeladen, ik heb al eens gekeken naar de header's maar ik krijg het niet aan de praat.
deze code wordt uitgevoerd bij het kleiner maken van de foto:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
Header("Cache-Control: must-revalidate");
Header($exphead);
header('Content-Type: image/jpeg');
$afbeelding_origineel = imagecreatefromjpeg($pad.'/'.$bestand);
imagecopyresampled($afbeelding, $afbeelding_origineel, 0, 0, 0, 0, $width, $height, $width_org, $height_org);
imagejpeg($afbeelding);
imagejpeg($afbeelding, $pad.'/case/'.$afmetingen.'/'.$bestand, 80);
?>
Header("Cache-Control: must-revalidate");
Header($exphead);
header('Content-Type: image/jpeg');
$afbeelding_origineel = imagecreatefromjpeg($pad.'/'.$bestand);
imagecopyresampled($afbeelding, $afbeelding_origineel, 0, 0, 0, 0, $width, $height, $width_org, $height_org);
imagejpeg($afbeelding);
imagejpeg($afbeelding, $pad.'/case/'.$afmetingen.'/'.$bestand, 80);
?>
en deze als de foto al in de case map zit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
header_remove("Cache-Control");
header_remove("Expires");
header_remove("Pragma");
header_remove("Transfer-Encoding");
Header("Cache-Control: must-revalidate");
Header($exphead);
header('Content-Type: '.$type);
echo file_get_contents($pad.'/case/'.$afmetingen.'/'.$bestand);
?>
header_remove("Cache-Control");
header_remove("Expires");
header_remove("Pragma");
header_remove("Transfer-Encoding");
Header("Cache-Control: must-revalidate");
Header($exphead);
header('Content-Type: '.$type);
echo file_get_contents($pad.'/case/'.$afmetingen.'/'.$bestand);
?>
Kan iemand eens kijken waar ik de mist in ga?
Mvg. knipper
Gewijzigd op 25/03/2015 20:02:22 door Php knipper
Dit staat letterlijk in het voorbeeld van imagecopyresampled() op php.net.
Als je dit soort dingen wilt debuggen, laat dan Content-Type headers weg, dan zie je waarschijnlijk dit soort fouten wel op je scherm verschijnen.
Toevoeging op 26/03/2015 11:58:06:
EDIT: daarnaast ontbreken er gegevens in bovenstaande fragmenten. En is het probleem niet helemaal duidelijk. Wat gaat er niet goed?
Thumb wordt niet goed aangemaakt: zie bovenstaande hint (maar wss niet van toepassing omdat je niet alle relevante code hebt geplaatst)
Thumb wordt telkens opnieuw aangemaakt: de controle op het bestaan van het bestand is niet goed of niet volledig
de afbeelding wordt gemaakt met imagecopyresampled(). In verband met de foto lukt alles, ik krijg een kleine versie en deze wordt opgeslagen in de case.
het probleem is dat ik ondanks de huidige headers nog steeds iedere keer opnieuw de foto's laad. De foto wordt dus niet opgeslagen in de case. Onderstaande zijn de headers van een foto:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
HTTP/1.1 200 OK
Date: Thu, 26 Mar 2015 12:59:16 GMT
Server: Apache
Cache-Control: must-revalidate
Expires: Sun, 29 Mar 2015 12:59:16 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Cache-Control: max-age=60, private, proxy-revalidate
Keep-Alive: timeout=10, max=489
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: 2
Date: Thu, 26 Mar 2015 12:59:16 GMT
Server: Apache
Cache-Control: must-revalidate
Expires: Sun, 29 Mar 2015 12:59:16 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Cache-Control: max-age=60, private, proxy-revalidate
Keep-Alive: timeout=10, max=489
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: 2
Quote:
De foto wordt dus niet opgeslagen in de case
Heb je dit echt geconstateerd? Het bestand ontbreekt?
Controleer je ook of alle deel-directories bestaan voordat je iets wegschrijft? (En zonee, maak je deze aan met de juiste rechten)?
Zijn de schrijfrechten van alle deel-directories (na afloop van creatie) goed?
Haal die Content-Type header nou eens (tijdelijk) weg :) en zet het tonen en rapporteren van foutmeldingen aan:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
// zet dit bovenaan je script
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>
// zet dit bovenaan je script
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>
Als je geen thumbnails hebt gaat er iets fout bij het wegschrijven ervan lijkt mij...
EDIT:
Content-Type: 2 <-- wat is dit?!
Gewijzigd op 26/03/2015 14:21:17 door Thomas van den Heuvel
Alles werkt op de server, tussen mijn mappen staat ook een map "case" en daar komt de foto in terecht.
maar als ik de foto laad krijgt die altijd de status 200 (ok) en nooit 304 (niet bewerkt vanaf browsercase)
de foto komt altijd van de website en niet van het geheuge van de computer
die 2 staat voor jpg
Maar dat stel je toch zelf in middels de headers die je meegeeft? Wat staat er in $exphead?
Plus, je serveert de afbeeldingen via een script. Als je nu zorgt dat die thumbs op enigerlei wijze eenmalig gegenereerd worden kun je vervolgens toch altijd rechtstreeks refereren aan (het bestand van) de afbeelding zelf? Hoeft geen script aan te pas te komen?
Tevens:
Default van browser?
Gewijzigd op 26/03/2015 14:57:45 door Thomas van den Heuvel
Code (php)
Ik gebruik een .htaccess regel die ervoor zorgt dat het een propere url is, er staat geen php in de url. ik gebruik het script zodat ik niet steeds moet uitzoeken of de foto al op meerdere grotes is gebracht.
Toevoeging op 26/03/2015 16:32:50:
het is me gelukt, ik heb bovenaan voor de session_start();
gezet en al mijn header manipulaties weg gedaan
bedankt
Gewijzigd op 26/03/2015 15:25:13 door php knipper