Wes Bos

Designer, Developer & Entrepreneur making the web an awesome place.

pagecache

This is a little code snippet that I use in almost every project that isn’t based on a popular CMS. Since its fairly expensive to hit the database on every page load, its a smart idea to cache the plain HTML markup of your page and serve that up. You can set how often the page cache is flushed out depending on how often you update your site’s content.

<?php
	// define the path and name of cached file
	$cachefile = 'cached-files/'.date('M-d-Y').'.php';
	// define how long we want to keep the file in seconds. I set mine to 5 hours.
	$cachetime = 18000;
	// Check if the cached file is still fresh. If it is, serve it up and exit.
	if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
   	include($cachefile);
    	exit;
	}
	// if there is either no file OR the file to too old, render the page and capture the HTML.
	ob_start();
?>
	<html>
		output all your html here.
	</html>
<?php
	// We're done! Save the cached content to a file
	$fp = fopen($cachefile, 'w');
	fwrite($fp, ob_get_contents());
	fclose($fp);
	// finally send browser output
	ob_end_flush();
?>

Have some others tricks? Leave a comment below!

This entry was posted in Code Snippets, PHP and tagged , , , . Bookmark the permalink.

23 Responses to Simple PHP Page Caching Technique

  1. Darcy Clarke says:

    Nice little snippet. Have put it to good use on some projects myself ;)

  2. jomppa says:

    Little optimization tip: there’s no need to use PHP’s parser (include) because cache file will always contain only static HTML. You should replace include() with readfile() or some other.

  3. Pingback: iFerris « 10 super useful PHP snippets

  4. Pingback: Simple PHP Page Caching Technique « Html « Php « Codes php – Share your php snippets

  5. Pingback: 10 super useful PHP snippets | CatsWhoCode.com

  6. Pingback: 10 super useful PHP snippets | Programming Blog

  7. Pingback: PHP – sistem de cache - Php - dexblog.ro

  8. Pingback: 7 个超级实用的 PHP 代码片段 | 芒果小站

  9. Pingback: 10个超级有用的PHP代码小片段 | In Eyes

  10. Jack says:

    i love this one.
    hope it work well, i am using an autocache class now but i don’t really like it.

  11. Kithu says:

    its really great artilce,it works well

  12. very good, i m going to use it, thank you

  13. Adam Ziaja says:

    Hello, this is great :).

  14. Rafique says:

    Nice and really works. Thanks

    • sun512 says:

      Dear rafique
      Please guide me where to put these code for page caching as my site having axtra load on my page profile.php
      so where i have to put these cache .
      Please guide me
      Thanks

  15. sun512 says:

    nice update please clarify where to put these code

  16. Pingback: Come cachare pagine in PHP in maniera facile e veloce | Lanz Blog

  17. Online Tv says:

    very great code, thanks very much.

  18. Mp3Skull says:

    I am using your function on my Website,

    I have made changing in your script to only cache index.php file (don’t want to cache other parameters like index.php?url=MyUrl etc)..

    $typer = $_REQUEST['url']; // Your GET (Query) sent ..

    if ($typer ==”){
    $cachefile = ‘cache/’.md5(‘index’).’.html’;
    // define how long we want to keep the file in seconds. I set mine to 2 hours.
    $cachetime = 7200;
    // Check if the cached file is still fresh. If it is, serve it up and exit.
    if (file_exists($cachefile) && time() – $cachetime

    Cache File

    <?php

  19. Pingback: Super practical seven PHP code snippet to share | Script Home

  20. Laphaze says:

    Thanks you so much for this, appreciate it

  21. James says:

    Awesome – has suddenly made the server load on my site a lot lighter

  22. Biswa says:

    Excellent code save lot’s of time in using other library on this.Great keep posting.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>