2009-06-08 2 views
0

Ich gründe, was ich denke, sind die richtigen HTTP-Header für das Caching von PHP und bin immer ein 500-Fehler auf jeder zweiten Anfrage.Bizarre Fehler, wenn sie versuchen HTTP Caching-Header von PHP zu verwenden

Kann mir jemand in die richtige Richtung zeigen?

Der Code, um das Caching zu tun ist:

<?php 
header('Content-Type: text/css'); 
$content = file_get_contents('test.css'); 
header('Content-Length: '. strlen($content)); 

$expires = 3600; 
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { 
    // Split the If-Modified-Since (Netscape < v6 gets this wrong) 
    $modifiedSince = explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE']); 

    // Turn the client request If-Modified-Since into a timestamp 
    $modifiedSince = strtotime($modifiedSince[0]); 
    $current_time = time(); 
    if (($current_time - $modifiedSince) < $expires) { 
    header("304 Not Modified"); 

    //echo $current_time - $modifiedSince; 
    exit(); 
    } 
} 

$current_time = time(); 
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $current_time)." GMT"); 
header("Expires: " . gmdate("D, d M Y H:i:s", $current_time+$expires) . " GMT"); 
header("Cache-Control: max-age=$expires"); 
echo $content; 

Dank

Edit 1: ich meine Cache ohne Freude gelöscht haben und jemand meldet es für sie arbeiten. Bedeutet dies ein Serverkonfigurationsproblem? Es ist auf einem gehosteten Server, wenn es darauf ankommt.

Edit 2: scheint nicht in IE zu passieren, aber in Firefox geschieht

+0

Works für mich in Ordnung. Versuchen Sie, Ihren Browser-Cache zu bereinigen. Sie haben vielleicht 500 oder etwas zwischengespeichert. –

+0

Versuchte keine Freude. Does, die Serverkonfiguration Sie bedeuten? –

Antwort

4

Wenn ich Ihren Code lief ich keine Status 500 Fehler bekommen, aber ich sah eine jede zweite Anfrage „dienen die Datei, eine leere Seite dienen "Verhalten ähnlich wie beschrieben.

Es ist wie Sie die Funktion header() korrekt sie nicht verwenden aussieht, wenn Sie den Status sind Einstellung 304. Sie sind die „HTTP/1.1“ fehlt. Dies bedeutet, dass PHP einen Header mit dem Status 200 zurücksendet und dann ohne Ausgabe austritt. Versuchen

header("HTTP/1.1 304 Not Modified"); 

Wenn Sie wirklich einen Server 500 Fehler auf jeder anderen Anfrage bekommen, herumzustochern Ihren Webserver (Apache?) Protokolle, um zu sehen, welche Art von Fehler auftauchen.

+0

Putting HTTP/1.1 arbeitete wie ein Charme. –

Verwandte Themen