tags:

views:

619

answers:

6

Hi! I would like to create a cache for my php pages on my site. I did find too many solutions but what I want is a script which can generate an HTML page from my database ex:

I have a page for categories which grabs all the categories from the DB, so the script should be able to generate an HTML page of the sort: my-categories.html. then if I choose a category I should get a my-x-category.html page and so on and so forth for other categories and sub categories.

I can see that some web sites have got URLs like: wwww.the-web-site.com/the-page-ex.html

even though they are dynamic.

thanks a lot for help

+1  A: 

I use APC for all my PHP caching (on an Apache server)

adam
+3  A: 

check ob_start() function

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

echo 'Content generated :'.$content;
Irmantas
+4  A: 

You can get URLs like that using URL rewriting. Eg: for apache, see mod_rewrite

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

You don't actually need to be creating the files. You could create the files, but its more complicated as you need to decide when to update them if the data changes.

benlumley
Unniloct
A: 

Manual caching (creating the HTML and saving it to a file) may not be the most efficient way, but if you want to go down that path I recommend the following (ripped from a simple test app I wrote to do this):

$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,'');
TravisO
A: 

If you're not opposed to frameworks, try using the Zend Frameworks's Zend_Cache. It's pretty flexible, and (unlike some of the framework modules) easy to implement.

Novaktually