2012-02-09 15 views
5

Mam sekcje na stronie, która wymaga sporej ilości zasobów, które chciałbym buforować, oto przykład strony.PHP Cache określone części strony

[=== Some Static HTML ===] 
[=== PHP Script 1 ===] 
[=== Some Static HTML ===] 
[=== PHP Script 2 ===] 

Chciałbym umieścić "1" skrypt PHP do pliku cache np script1.html i umieścić go zamiast przetwarzania cały skrypt, a tym samym dla Script 2.

Problem mam czy mogę łatwo buforować całą stronę i działa, ale chciałbym tylko buforować określone części (jak wyżej), ponieważ niektóre dane, takie jak dane sesji użytkownika, muszą być aktywne.

Mam tę klasę, która ma być w stanie zatrzymać i uruchomić bufor, dzięki czemu mogę wyciągnąć określone części bez łamania reszty strony, ale nie robi to, co chcę. http://pastebin.com/Ua6DDExw

Chciałbym móc to zrobić poniżej, podczas gdy mogłoby ono przechowywać sekcję w pliku za pomocą prostego php inlcude raczej uderzając w bazę danych.

HTML Content 

<?php 
$cache->start_buffer("cache_name"); 
// PHP Script 
$cache->end_buffer("cache_name"); 
?> 

HTML Content 

<?php 
$cache->start_buffer("cache_name"); 
// PHP Script 
$cache->end_buffer("cache_name"); 
?> 

Nie mam dostępu do memcache ani niczego podobnego, ponieważ będzie to udostępniany hosting.

Każda pomoc będzie wielki, Dzięki

+1

ktoś inny dostał jakieś pomysły? –

Odpowiedz

4

spojrzenie w użyciu ob_start() i ob_flush() Czyni to, czego szukasz zrobić. Musisz ręcznie zapisać go do pliku. Istnieją również klasy cache.php na wolności.

http://php.net/manual/en/function.ob-start.php

<?php 

    $cache_time = 3600; // Time in seconds to keep a page cached 
    $cache_folder = '/cache'; // Folder to store cached files (no trailing slash) 

    // Think outside the box the original said to use the URI instead use something else. 
    $cache_filename = $cache_folder.md5(",MyUniqueStringForMyCode"); // Location to lookup or store cached file 

    //Check to see if this file has already been cached 
    // If it has get and store the file creation time 
    $cache_created = (file_exists($cache_file_name)) ? filemtime($this->filename) : 0; 

    if ((time() - $cache_created) < $cache_time) { 
    $storedData = readCacheFile($cache_filename); 
    } 
    else 
    { 

    // Alternatively you can ignore the ob_start/get_contents/end_flush code 
    // and just call a function and store it directly to the variable. 
    // Start saving stuff 
    ob_start(); 

    /** do your work here echoing data to the screen */ 

    $storedData = ob_get_contents(); 
    ob_end_flush(); 

    // create the cachefile for the data. 
    createCacheFile($cache_filename); 
    } 


    // Do stuff with $storedData. 
+0

Dziękuję, zrobię więcej badań. Miałem trudności ze zrozumieniem wszystkich różnych funkcji buforowania. –

+2

Wypróbuj ten samouczek, który dokładnie wyjaśnia, co chcesz zrobić. http://www.mikebernat.com/blog/Caching_PHP_Pages_withOOutput_Buffering – thenetimp

+0

Ten tut/skrypt będzie działał tylko wtedy, gdy próbuję buforować całą stronę. Proszę ponownie przeczytać moje pytanie. –

Powiązane problemy