auto_cache_manifest.php
Gesponsorde koppelingen
PHP script bestanden
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
function cache_manifest($f, $u, $ignore = false){
if(!count($f) == count($u) && is_array($f) && is_array($u)){
global $_cache_error;
$_cache_error = "ERROR: De opgegeven array's zijn niet gelijk!<br />";
}
// verplichte eerste regel
$manifest = 'CACHE MANIFEST' . PHP_EOL;
$error = false;
for($i = 0; $i < count($f); $i ++){
if(is_file($f[$i])){
// voeg bestandsnaam toe met een enter aan het einde
// voeg daarna de md5-waarde van het bestand toe in commentaar (de # geeft commentaar aan), waarom?
// een browser zal pas opnieuw gaan cachen als het manifest, dit dus, veranderd is.
// het maakt niet uit of het bestand veranderd is.
// Als het bestand nu veranderd is, is de hash anders, dus de manifest is anders, dus het word opnieuw gecached.
$manifest .= $u[$i] . PHP_EOL;
$manifest .= "#" . md5_file($f[$i]) . PHP_EOL;
} elseif(!$ignore){
// bestandsnaam in de array bewaren
$error .= $f[$i] . "<br />";
}
}
if($error){
// Er is een fout opgetreden, sla deze op in een globale variabele zodat deze later gelezen kan worden voor debug-doeleinden
global $_cache_error;
$_cache_error = "ERROR: De volgende bestanden bestaan niet!<br />(Om dit te onderdrukken kan je de 'ignore' parameter zetten)<br /><br />" . $error;
return false;
}
return $manifest;
}
/*
wat je hier NIET in moet zetten;
dynamische pagina's die veel veranderen.
pagina's die per se internet nodig hebben, b.v. login.php.
bestanden die niet bestaan, ik weet niet hoe een browser hier op reageerd maar het kan niet handig zijn.
erg grote pagina's, de cache mag max 5MB zijn, das genoeg ruimte maar ga nou niet je online mp3 verzameling hierin zetten.
wat wel?
javascript bestanden,
afbeeldingen,
informatie paginas,
enz,
*/
// misschien wil je liever een readdir() functie gebruiken, het maakt niet uit zolang je maar een array krijgt gevuld met bestandsnamen (inclusief path!)
$files = array(
"images/afbeelding.jpg",
"javascript/script.js",
"files/pagina.html",
);
$uri = array(
"http://www.site.com/images/afbeelding.jpg",
"http://www.site.com/javascript/script.js",
"http://www.site.com/pagina/",
);
if($manifest = cache_manifest($files, $uri)){
// mooi, niks fout gegaan,
// een cache manifest moet deze header hebben, alleen zetten als alles goed gegaan is.
header("Content-Type: text/cache-manifest");
echo $manifest;
} else {
// Een (of meer) van de bestanden bestaat niet, laat de foutmelding zien zodat we (en ik bedoel 'jij') kunnen debuggen
echo $_cache_error;
}
function cache_manifest($f, $u, $ignore = false){
if(!count($f) == count($u) && is_array($f) && is_array($u)){
global $_cache_error;
$_cache_error = "ERROR: De opgegeven array's zijn niet gelijk!<br />";
}
// verplichte eerste regel
$manifest = 'CACHE MANIFEST' . PHP_EOL;
$error = false;
for($i = 0; $i < count($f); $i ++){
if(is_file($f[$i])){
// voeg bestandsnaam toe met een enter aan het einde
// voeg daarna de md5-waarde van het bestand toe in commentaar (de # geeft commentaar aan), waarom?
// een browser zal pas opnieuw gaan cachen als het manifest, dit dus, veranderd is.
// het maakt niet uit of het bestand veranderd is.
// Als het bestand nu veranderd is, is de hash anders, dus de manifest is anders, dus het word opnieuw gecached.
$manifest .= $u[$i] . PHP_EOL;
$manifest .= "#" . md5_file($f[$i]) . PHP_EOL;
} elseif(!$ignore){
// bestandsnaam in de array bewaren
$error .= $f[$i] . "<br />";
}
}
if($error){
// Er is een fout opgetreden, sla deze op in een globale variabele zodat deze later gelezen kan worden voor debug-doeleinden
global $_cache_error;
$_cache_error = "ERROR: De volgende bestanden bestaan niet!<br />(Om dit te onderdrukken kan je de 'ignore' parameter zetten)<br /><br />" . $error;
return false;
}
return $manifest;
}
/*
wat je hier NIET in moet zetten;
dynamische pagina's die veel veranderen.
pagina's die per se internet nodig hebben, b.v. login.php.
bestanden die niet bestaan, ik weet niet hoe een browser hier op reageerd maar het kan niet handig zijn.
erg grote pagina's, de cache mag max 5MB zijn, das genoeg ruimte maar ga nou niet je online mp3 verzameling hierin zetten.
wat wel?
javascript bestanden,
afbeeldingen,
informatie paginas,
enz,
*/
// misschien wil je liever een readdir() functie gebruiken, het maakt niet uit zolang je maar een array krijgt gevuld met bestandsnamen (inclusief path!)
$files = array(
"images/afbeelding.jpg",
"javascript/script.js",
"files/pagina.html",
);
$uri = array(
"http://www.site.com/images/afbeelding.jpg",
"http://www.site.com/javascript/script.js",
"http://www.site.com/pagina/",
);
if($manifest = cache_manifest($files, $uri)){
// mooi, niks fout gegaan,
// een cache manifest moet deze header hebben, alleen zetten als alles goed gegaan is.
header("Content-Type: text/cache-manifest");
echo $manifest;
} else {
// Een (of meer) van de bestanden bestaat niet, laat de foutmelding zien zodat we (en ik bedoel 'jij') kunnen debuggen
echo $_cache_error;
}