Caching-Bilder-requests durch PHP - If-Modified-since nicht gesendet
Ich diene Bilder durch php und habe einige Probleme bei der Einrichtung zu reagieren 304-Header zu speichern, auf die Ladezeit.
Meisten der code unten habe ich gefunden auf php.net. Es funktioniert, jedoch antwortet IMMER mit 200. Aus irgendeinem Grund die If-Modified-since-header nicht empfangen, die auf alle Anfragen, auch wenn ich das senden der Last-Modified-header zunächst. Dies geschieht auf einem apache-server. Irgendeine Idee was falsch sein könnte?
Dieser Seite laden Sie das Bild von der Festplatte und zeigt Sie im browser, zusammen mit dem senden eines Last-Modified-header. Wenn Sie die Seite aktualisieren, browser, nicht senden eine If-Modified-since-header, wie es sollte.
define('SITEPATH', (dirname($_SERVER['SCRIPT_NAME']) == '/') ? '/' : dirname($_SERVER['SCRIPT_NAME']).'/');
$load_path = $_SERVER['DOCUMENT_ROOT'] . SITEPATH . 'fpo_image.jpg';
//Get headers sent by the client.
$headers = apache_request_headers();
$file_time = filemtime($load_path);
header('Cache-Control: must-revalidate');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $file_time).' GMT');
if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == $file_time)) {
header('HTTP/1.1 304 Not Modified');
header('Connection: close');
} else {
header('HTTP/1.1 200 OK');
header('Content-Length: '. filesize($load_path));
header('Content-type: image/jpeg');
readfile($load_path);
}
- +1 für die Frage! Ein sehr ähnliches problem mit If-Modified-since-header Rücksendung der volle Inhalt statt 304: stackoverflow.com/questions/4810806/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, es sollte
Überprüfen, ob die änderung größer oder gleich als nur gleich. Obwohl ich verstehe, dass die beiden Werte sollte gleich sein.
mandor auf mandor dot net eine Lösung gepostet am PHP.net die Dokumentation für die header-Funktion, die für mich gearbeitet:
Nach der Suche für eine Weile, ich habe die Antwort gefunden. Der browser hat nicht zwischengespeichert alles (und nicht senden Sie die
If-Modified-Since
), bis ich den folgenden header gesendet:Nachdem dies alles geklappt.
Musste ich Keith 's Lösung mit der Kombination von azkotoki und Zsolti' s Beiträge vor, damit alles funktioniert wie gewünscht.
so, letztes Beispiel wäre:
Prüfen, ob Sitzungen werden auf dieser Seite verwendet werden, Wenn das so ist, versuchen Sie dies:
Wenn die oben genannten gearbeitet, hier ist die Erklärung:
Php die session-Mechanismus, sendet eine automatische cache-bezogene überschriften, um zur Verbesserung der session-cookie-Privatsphäre, vermeiden Sie es, die zwischengespeichert werden durch zwischen-proxyes:
http://php.net/manual/en/function.session-cache-limiter.php
Diese automatische Kopfzeilen, dass der browser nicht immer senden " If-Modified-since-header, wie Sie anweisen, es nicht zu irgendwelche Cachen.