Ich habe eine PHP-Site in Cloud-Server ausgeführt. Wenn ich neue Dateien CSS, JS oder Bilder hinzufüge, lädt der Browser die gleichen alten JS-, CSS- und Bilddateien, die im Cache gespeichert sind.
Meine Website hat einen Doctype und ein Meta-Tag wie unten
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">
Aufgrund des obigen Doctype und Metacodes lade ich die gleichen Dateien, die im Browser zwischengespeichert sind, anstatt der neuen
php
http-headers
browser-cache
cache-control
ArrayOutOfBound
quelle
quelle
No Cache in all Browsers
. Sie können auch eine? RandomGeneratedNumber für die Dateien erstellen, die nicht zwischengespeichert werden sollen.Antworten:
Versuche dies
quelle
session_start()
später verwenden, wird Ihr Header überschrieben,Cache-Control: private, max-age=10800, pre-check=10800
da der Standardwert von 180 Minuten istsession.cache_expire
. Wenn Sie das Starten der Sitzung nicht vermeiden können, aber die Cache-Verwendung deaktivieren müssensession_cache_limiter('private');session_cache_expire(0);
.header
Funktion ist ein Boolescher Wert zum Ersetzen . Der optionale Ersetzungsparameter gibt an, ob der Header einen vorherigen ähnlichen Header ersetzen oder einen zweiten Header desselben Typs hinzufügen soll.Hier, wenn Sie es über HTML steuern möchten: Gehen Sie wie folgt vor folgt vor: Option 1:
Und wenn Sie es über PHP steuern möchten: Gehen Sie wie folgt vor folgt vor: Option 2:
UND Option 2 IST IMMER BESSER, um Probleme mit dem Proxy-basierten Caching zu vermeiden.
quelle
Sie können dies versuchen:
Hoffentlich hilft es, Cache zu verhindern, wenn überhaupt!
quelle
Ich hatte Probleme beim Zwischenspeichern meiner CSS-Dateien. Das Festlegen von Headern in PHP hat mir nicht geholfen (möglicherweise, weil die Header in der Stylesheet-Datei anstelle der damit verknüpften Seite festgelegt werden müssten?).
Ich habe die Lösung auf dieser Seite gefunden: https://css-tricks.com/can-we-prevent-css-caching/
Die Lösung:
Fügen Sie den Zeitstempel als Abfrageteil des URI für die verknüpfte Datei hinzu.
(Kann für CSS, JS, Bilder usw. verwendet werden.)
Zur Entwicklung:
<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">
Für die Produktion (wo Caching meistens eine gute Sache ist):
<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(und manuell umschreiben, wenn es erforderlich ist)
Oder eine Kombination dieser beiden:
BEARBEITEN:
Oder eine schönere Kombination dieser beiden:
quelle
Das Verhindern des Browser-Cache ist je nach Fall keine gute Idee. Auf der Suche nach einer Lösung habe ich Lösungen wie diese gefunden:
Das Problem hierbei ist, dass, wenn die Datei während eines Updates auf dem Server überschrieben wird, was mein Szenario ist, der Cache ignoriert wird, da der Zeitstempel geändert wird, auch wenn der Inhalt der Datei derselbe ist.
Ich verwende diese Lösung, um den Browser zu zwingen, Assets nur herunterzuladen, wenn sein Inhalt geändert wird:
quelle
stat
Anruf tätigen . Ohne Dateisystem-Cache, 16 ns, oben? Mit Cache zuverlässig <8ns. Nanosekunden. Und auf meinem System kann MD5 754 MiB / s verarbeiten, ohne zu blinken. (openssl speed md5
) In Kombination hätte eine 100-KB-CSS-Datei einen zusätzlichen Overhead von… 129µs (Mikrosekunden, 0,1295ms) + 8ns (was nicht wesentlich zur endgültigen Zahl beiträgt) = 129µs.hash_file('md5', $deployment_counter)
oderhash_file('md5', $cache_clear_counter)
sind die ersten, die mir in den Sinn kommen.