I have sections on a page that require a fair amount of resources that I would like to cache, here is an example of the page.
[=== Some Static HTML ===]
[=== PHP Script 1 ===]
[=== Some Static HTML ===]
[=== PHP Script 2 ===]
I would like to put "PHP Script 1" into a cache file eg script1.html and include it rather than processing the whole script, and the same for Script 2.
The problem I have is I can cache the whole page easily and it works but I would like to just cache specific parts (as above) because some things like user session data needs to be live.
I have this class that is meant to be able to stop and start the buffer so I can pull out specific parts without breaking the rest of the page however it doesn't do what I want. http://pastebin.com/Ua6DDExw
I would like to be able to go like this below, while it would store the section in a file with a simple php inlcude rather hitting the database.
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");
?>
I don't have access to memcache or anything else like that because this will be going on shared hosting.
Any help would be great, Thanks
look into using ob_start()
and ob_flush()
It does what you are looking to do. You'll need to manually write it to a file. There are cache.php classes out in the wild as well.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With