如何缓存动态PHP页面

Nag*_*agy 20 php caching

如何缓存具有mysql查询的PHP页面.任何一个例子都会很有帮助.

Ken*_* Le 18

我正在使用phpFastCache(用于共享主机,如果你不想触摸php.ini和root来设置memcached).查看示例菜单.他们有完整的详细示例,非常简单.

首先你用phpFastCache :: set设置然后用phpFastCache :: get - DONE获取!

示例:减少数据库调用

您的网站有10,000名在线访问者,您的动态页面必须在每次加载页面时向数据库发送10,000个相同的查询.使用phpFastCache,您的页面只向DB发送1个查询,并使用缓存为9,999个其他访问者提供服务.

<?php
    // In your config file
    include("php_fast_cache.php");
    phpFastCache::$storage = "auto";
    // you can set it to files, apc, memcache, memcached, pdo, or wincache
    // I like auto

    // In your Class, Functions, PHP Pages
    // try to get from Cache first.
    $products = phpFastCache::get("products_page");

    if($products == null) {
        $products = YOUR DB QUERIES || GET_PRODUCTS_FUNCTION;
        // set products in to cache in 600 seconds = 5 minutes
        phpFastCache::set("products_page",$products,600);
    }

   OUTPUT or RETURN your $products
?>
Run Code Online (Sandbox Code Playgroud)


Ann*_*rom 13

我的偏好是使用缓存反向代理,如Varnish.

就纯PHP解决方案而言,您可以在脚本末尾放置一些缓存最终输出的代码,并在开头检查以查看页面是否缓存.如果在缓存中找到该页面,则发送它并退出而不是再次运行查询.

<?php

function cache_file() {
    // something to (hopefully) uniquely identify the resource
    $cache_key = md5($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']);
    $cache_dir = '/tmp/phpcache';

    return $cache_dir . '/' . $cache_key;
}

// if we have a cache file, deliver it
if( is_file( $cache_file = cache_file() ) ) {
    readfile( $cache_file );
    exit;
}

// cache via output buffering, with callback
ob_start( 'cache_output' );

//
// expensive processing happens here, along with page output.
//

function cache_output( $content ) {
    file_put_contents( cache_file(), $content );
    return $content;
}
Run Code Online (Sandbox Code Playgroud)

显然,这需要对您的设置进行大量自定义,包括缓存过期,$cache_key满足您的需求,以及错误检测,以便不缓存错误的页面.


sat*_*hia 2

memcache 你的 html,然后执行如下操作:

$memcache = memcache_connect('localhost', 11211);

$page  = $memcache->get('homepage');
if($page == ""){
    $mtime = microtime();
    $page = get_home();
    $mtime = explode(" ",$mtime);
    $mtime = $mtime[1] + $mtime[0];
    $endtime = $mtime;
    $totaltime = ($endtime - $starttime);
    memcache_set($memcache, 'homepage', $page, 0, 30);
    $page .= "\n<!-- Duly stored ($totaltime) -->";
}
else{
    $mtime = microtime();
    $mtime = explode(" ",$mtime);
    $mtime = $mtime[1] + $mtime[0];
    $endtime = $mtime;
    $totaltime = ($endtime - $starttime);
    $page .= "\n&lt;!-- served from memcache ($totaltime) -->";
}
die($page);
Run Code Online (Sandbox Code Playgroud)