Caching van PHP-respons
Voor een PHP-applet die een Ajax-respons genereert, wil ik caching door client of proxy inschakelen. De XML-output van het PHP-script verandert namelijk hooguit wekelijks. Is de volgende opzet goed of heb ik iets over het hoofd gezien?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
// HTTP-compressie met impliciete flush inschakelen
ob_start('ob_gzhandler');
ob_implicit_flush(true);
// Algemene HTTP-headers toevoegen
header('Content-Language: nl-NL');
header('Content-Type: text/plain; charset=UTF-8');
// HTTP-headers voor caching toevoegen
$expires = 7 * 24 * 60 * 60;
header('Pragma: public');
header('Cache-Control: maxage=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
// Bestandsnaam van dit PHP-bestand
$filename = 'index.php';
// Datum en tijd van de laatste wijziging van dit bestand
$filemtime = filemtime($filename);
// HTTP-headers die door de client zijn verzonden
$headers = apache_request_headers();
// Controleren of de client zijn cache valideert
if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == $filemtime)) {
// Cache van de client is up-to-date
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $filemtime) . ' GMT', true, 304);
ob_end_flush();
exit;
} else {
// Bestand is niet opgeslagen in de clientcache of de cache is verouderd
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $filemtime).' GMT', true, 200);
}
?>
// HTTP-compressie met impliciete flush inschakelen
ob_start('ob_gzhandler');
ob_implicit_flush(true);
// Algemene HTTP-headers toevoegen
header('Content-Language: nl-NL');
header('Content-Type: text/plain; charset=UTF-8');
// HTTP-headers voor caching toevoegen
$expires = 7 * 24 * 60 * 60;
header('Pragma: public');
header('Cache-Control: maxage=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
// Bestandsnaam van dit PHP-bestand
$filename = 'index.php';
// Datum en tijd van de laatste wijziging van dit bestand
$filemtime = filemtime($filename);
// HTTP-headers die door de client zijn verzonden
$headers = apache_request_headers();
// Controleren of de client zijn cache valideert
if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) == $filemtime)) {
// Cache van de client is up-to-date
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $filemtime) . ' GMT', true, 304);
ob_end_flush();
exit;
} else {
// Bestand is niet opgeslagen in de clientcache of de cache is verouderd
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $filemtime).' GMT', true, 200);
}
?>
Er zijn nog geen reacties op dit bericht.