StefanRSA Posted May 24, 2010 Share Posted May 24, 2010 Is it possible to cache only part of a page? The header will carry the user session data and so more and the body of the page can be static. If I use the following code everything is cahced and stuff around with user sessions. $interval = 30 * 60; $filename = "cache/".basename( rtrim( $_SERVER["REQUEST_URI"], '/' ) ).".cache"; // serve from the cache if less than 30 minutes have passed since the file was created if ( file_exists( $filename ) && (time() - $interval) < filemtime( $filename ) ) { readfile( $filename ); exit(); // Terminate so we don't regenerate the page. } ob_start(); // This function saves all output to a buffer instead of outputting it directly. // PHP page generation code goes here The page detail: <?php // More page generation code goes here $buff = ob_get_contents(); // Retrive the content from the buffer // Write the content of the buffer to the cache file $file = fopen( $filename, 'w" ); fwrite( $file, $buff ); fclose( $file ); ob_end_flush(); // Display the generated page. ?> Quote Link to comment Share on other sites More sharing options...
mga_ka_php Posted May 26, 2010 Share Posted May 26, 2010 <?php class cache { var $cache_dir = "cache/"; // Directory where the cache files will be stored var $cache_time = 7320; // How much time will keep the cache files in seconds var $caching = false; var $cache_file = ""; // Constructor of the class function cache() { $this->cache_file = $this->cache_dir . md5(urlencode($_SERVER["REQUEST_URI"])); if (file_exists($this->cache_file)) { //Grab the cache: $handle = fopen($this->cache_file, "r"); do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } echo $data; } while (true); fclose($handle); echo "<span style='font-size:8px;'>cache page loaded</span>"; exit(); } else { //create cache : $this->caching = true; ob_start(); } } // You should have this at the end of each page function close() { if ($this->caching) { // You were caching the contents so display them, and write the cache file $data = ob_get_clean(); echo $data; $fp = fopen(str_replace("/ww.", "/", $this->cache_file), 'w'); fwrite($fp, $data); fclose($fp); } } } ?> <html> <head> </head> <body> <?php include("cache.class.php"); ?> <?php $ch = new cache(); ?> THIS CONTENT WILL BE CACHED <?php $ch->close(); ?> </body> </html> Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.