wake-up-neo.com

So verhindern Sie den Browser-Cache für PHP-Sites

Ich habe eine PHP-Site auf dem Cloud-Server. Wenn ich neue CSS-, JS- oder Image-Dateien hinzufüge, lädt der Browser dieselben alten CSS- und Image-Dateien, 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)">

Wegen des oben genannten doctype und des Metacodes lade ich die gleichen Akten, die im Browser anstelle von neuem zwischengespeichert werden

102
ArrayOutOfBound

versuche dies

<?php

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
252
Codesen

Wenn Sie dies über HTML steuern möchten, gehen Sie wie folgt vor: Option 1:

<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/>
<meta http-equiv="pragma" content="no-cache" />

Und wenn Sie es über PHP steuern möchten: Gehen Sie wie folgt vor Option 2:

header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');

AND Option 2 IS IMMER BESSER, um Proxy-basierte Caching-Probleme zu vermeiden.

30
Ritesh Aryal

Sie können dies versuchen:

    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("Connection: close");

Hoffentlich hilft es dabei, Cache zu verhindern, falls vorhanden!

10
Aakanksha

Ich hatte ein Problem mit dem Caching meiner CSS-Dateien. Das Setzen von Headern in PHP hat mir nicht geholfen (vielleicht, weil die Header in der Stylesheet-Datei gesetzt werden müssten, anstatt der Seite, die darauf verweist?).

Ich habe die Lösung auf dieser Seite gefunden: https://css-tricks.com/can-we-prevent-css-caching/

Die Lösung:

Hänge den Zeitstempel als Abfrageteil der URI für die verknüpfte Datei an.
(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 neu schreiben, wenn es erforderlich ist)

Oder eine Kombination dieser beiden:

<?php
    define( "DEBUGGING", true ); // or false in production enviroment
?>
<!-- ... -->
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>">

EDIT:

Oder eine schönere Kombination dieser beiden:

<?php
    // Init
    define( "DEBUGGING", true ); // or false in production enviroment
    // Functions
    function get_cache_prevent_string( $always = false ) {
        return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : "";
    }
?>
<!-- ... -->
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>">
6
Lukas

Das Verhindern des Browser-Cache ist je nach Fall keine gute Idee. Auf der Suche nach einer Lösung habe ich folgende Lösungen gefunden:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=filemtime($file);?>">

das Problem hierbei ist, dass der Cache ignoriert wird, wenn die Datei während eines Updates auf dem Server überschrieben wird. Dies ist mein Szenario, da der Zeitstempel geändert wird, auch wenn der Inhalt der Datei identisch ist.

Ich verwende diese Lösung, um den Browser nur dann zum Herunterladen von Assets zu zwingen, wenn der Inhalt geändert wird:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file('md5', $file);?>">
5
ismavolk