Caching HTML output with PHP

后端 未结 8 1435
时光说笑
时光说笑 2020-12-19 21:03

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:

相关标签:
8条回答
  • 2020-12-19 21:08

    check ob_start() function

    ob_start();
    echo 'some_output';
    $content = ob_get_contents();
    ob_end_clean();
    
    echo 'Content generated :'.$content;
    
    0 讨论(0)
  • 2020-12-19 21:14

    In my opinion this is the best solution. I use this for cache JSON file for my Android App. It can be simply use in other PHP files. It's optimize file size from ~1mb to ~163kb (gzip).

    Create cache folder in your directory

    Then Create cache_start.php file and paste this code

    <?php
    header("HTTP/1.1 200 OK");
    //header("Content-Type: application/json"); 
    header("Content-Encoding: gzip");
    
    $cache_filename = basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'];
    $cache_filename = "./cache/".md5($cache_filename);
    $cache_limit_in_mins = 60 * 60; // It's one hour
    
    
    if (file_exists($cache_filename))
    {
        $secs_in_min = 60;
        $diff_in_secs = (time() - ($secs_in_min * $cache_limit_in_mins)) - filemtime($cache_filename);
        if ( $diff_in_secs < 0 )
        {
            print file_get_contents($cache_filename);
            exit();
        }
    }
    ob_start("ob_gzhandler");
    ?>
    

    Create cache_end.php and paste this code

    <?php
    $content = ob_get_contents();
    ob_end_clean();
    $file = fopen ( $cache_filename, 'w' );
    fwrite ( $file, $content );
    fclose ( $file );
    echo gzencode($content);
    ?>
    

    Then create for example index.php (file which you want to cache)

    <?php
    include "cache_start.php";
    echo "Hello Compress Cache World!";
    include "cache_end.php";
    ?>
    
    0 讨论(0)
  • 2020-12-19 21:16

    I was thinking from the point of load on the database, and charges for data bandwidth and speed of loading. I have some pages which are unlikely to change in years, (I know it is easy to use a CMS system based on a database ). Unlike in US, here the cost of bandwidth can be high. Anybody has any views on that, whether to create htmal pages or dynamic (php, asp.net) Links to the pages would be stored on a database anyway.

    0 讨论(0)
  • 2020-12-19 21:18

    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 = basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'];
    $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,'') );
    fclose ( $file );
    
    print implode($output,'');
    
    0 讨论(0)
  • 2020-12-19 21:25

    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.

    0 讨论(0)
  • 2020-12-19 21:27

    Can use Cache_lite from PEAR:

    Details here http://mahtonu.wordpress.com/2009/09/25/cache-php-output-for-high-traffic-websites-pear-cache_lite/

    0 讨论(0)
提交回复
热议问题