PHP ile önbelleğe alma HTML çıktı

6 Cevap php

Sitemde benim php sayfaları için bir önbellek oluşturmak istiyorum. Ben de birçok çözüm bulmak ama ne ben istiyorum benim veritabanı eski bir HTML sayfası oluşturmak için bir script yaptı:

Ben DB tüm kategoriler kapmak kategoriler için bir sayfa var, bu yüzden komut tür bir HTML sayfası oluşturmak gerekir: my-categories.html. Ben bir kategori seçerseniz o zaman ben benim-x-category.html sayfa olsun ve benzeri ve benzeri diğer kategoriler ve alt kategoriler için olmalıdır.

Wwww.the-web-site.com/the-page-ex.html: Bazı web siteleri gibi URL'leri var olduğunu görebilirsiniz

onlar dinamik olsa bile.

teşekkürler yardım için bir çok

6 Cevap

() işlevini ob_start kontrol

ob_start();
echo 'some_output';
$content = ob_get_contents();
ob_end_clean();

echo 'Content generated :'.$content;

Sen URL yeniden kullanarak bu gibi URL'leri alabilirsiniz. Örn: apache için, bkz mod_rewrite'ın

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

Aslında dosyaları oluşturma olması gerekmez. Eğer veri değişiklikler bunları güncellemek için ne zaman karar vermeniz gerekir gibi dosyaları, ama onun daha karmaşık yaratabilir.

Manuel önbelleğe alma (HTML oluşturma ve bir dosyaya kaydetme) en verimli yolu olmayabilir, ancak bu yolda gitmek istiyorum ben (ben bunu yapmak için yazdığı bir basit bir test app yırtık) aşağıdaki tavsiye:

$cache_filename = 'scrum_list_CACHED_OUTPUT.html';
$cache_limit_in_mins = 60 * 32; // this forms 32hrs
// check if we have a cached file already
if ( file_exists($cache_filename) )
{
    $secs_in_min = 60;
    $diff_in_secs = (time() - ($secs_in_min * $cache_limit_in_mins)) - filemtime($cache_filename);
    // check if the cached file is older than our limit
    if ( $diff_in_secs < 0 )
    {
    	// it isn't, so display it to the user and stop
    	print file_get_contents($cache_filename));
    	exit();
    }
}

// create an array to hold your HTML output, this is where you generate your HTML
$output = array();
$output[] = '<table>';
$output[] = '<tr>';
// etc

//  Save the output as manual cache
$file = fopen ( $cache_filename, 'w' );
fwrite ( $file, implode($output_final,'') );
fclose ( $file );

print implode($output_final,'');

Ben (bir Apache sunucu üzerinde) APC tüm PHP önbelleğe alma için kullanın

Eğer çerçeveler karşı değilseniz, Zend Altyapıları en Zend_Cache kullanmayı deneyin. Oldukça esnek ve uygulamak için (çerçeve bazı modüllerin aksine) kolay.