Visa ett inlägg
Oläst 2005-04-14, 11:22 #19
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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`
grazzy är inte uppkopplad   Svara med citatSvara med citat