2012-02-09 21 views
5

Tengo secciones en una página que requieren una buena cantidad de recursos que me gustaría almacenar en caché, aquí hay un ejemplo de la página.Partes específicas de la memoria caché PHP de una página

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

me gustaría poner "Script PHP 1" en un archivo de caché por ejemplo script1.html e incluirlo en lugar de procesar todo el guión, y lo mismo para la escritura 2.

El problema que tengo es que puedo guardar en caché toda la página fácilmente y funciona, pero me gustaría simplemente almacenar en caché partes específicas (como se indica más arriba) porque algunas cosas, como los datos de la sesión del usuario, deben estar en vivo.

Tengo esta clase que está destinada a ser capaz de detener e iniciar el búfer para poder extraer partes específicas sin romper el resto de la página, sin embargo, no hace lo que quiero. http://pastebin.com/Ua6DDExw

Me gustaría poder seguir así, mientras que almacenaría la sección en un archivo con una simple entrada de php en vez de golpear la base de datos.

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"); 
?> 

No tengo acceso a Memcache ni a nada parecido porque se ejecutará en alojamiento compartido.

Cualquier ayuda sería grande, Gracias

+1

Alguien más tiene algunas ideas? –

Respuesta

4

ver en el uso ob_start() y ob_flush() Hace lo que busca hacer. Tendrá que escribirlo manualmente en un archivo. También hay clases de cache.php en la naturaleza.

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

Gracias, voy a investigar un poco más. Estaba teniendo dificultades para entender todas las diferentes funciones de almacenamiento en búfer. –

+2

Pruebe este tutorial, explica exactamente lo que quiere hacer. http://www.mikebernat.com/blog/Caching_PHP_Pages_with_Output_Buffering – thenetimp

+0

Ese tut/script solo funcionará si intento almacenar en caché toda la página. Por favor vuelve a leer mi pregunta. –

Cuestiones relacionadas