Som en vän häromdagen påpekade så kan man även serialisera objekt till disken i PHP. Det kan vara praktiskt om man har lite overhead på att skapa objekten.
Se
http://se.php.net/serialize och
http://se.php.net/unserialize
Här är kod för att cachelagra filer i php.
Kod:
ob_start(); # startar output buffering
ob_implicit_flush(0); # stänger av automatisk flush
/* rss_output är en hemmagjord funktion som skriver ut en rss-feed
* från ett mysql-result. Den skriver till vanliga stdout/skärmen.
*/
rss_output($result);
$contents = ob_get_contents(); #spara buffern i $contents
ob_end_clean(); #rensar buffern och slår på automatisk flush
# skriver ner filen till $rss_filename som är ett unikt filnamn baserat på alla statevariablar
# sorteringsordning, sökord, kriterier etc.
$fh = fopen($rss_filename,"w");
fwrite($fh,$contents,strlen($contents));
fclose($fh);
# spotta ut innehållet på skärmen (annar visas inte datan första gången man kör)
echo $contents;
För att sedan använda sig av den cache-lagrade filen är det bara att titta om den finns.
Kod:
if (file_exists($rss_filename)) {
Header("Content-Type: application/xml"); # spotta ut en header (specifikt för xml/rss)
echo file_get_contents($rss_filename); # läs in och skriv ut filen
die(); # lite fulhack, men sånt är livet :)
}
För att göra livet enkelt för mig har jag valt att inte läsa timestamps osv i mina script, utan det sköts istället via ett crontabjob som med följande rader tar bort alla filer som är äldre än 14 minuter:
rm -f \`find *.xml -cmin +14`