我们如何在php中准确地进行缓存

我们如何在php中准确地进行缓存,php,caching,Php,Caching,我是一名网络开发新手 在我的应用程序中,我需要缓存,这样任何人都可以向我详细解释如何缓存PHP页面?首先在站点的根目录下创建一个名为cache的文件夹,并使其可写 我有一个名为caching_functions.php的文件,如下所示: <? $test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NA

我是一名网络开发新手


在我的应用程序中,我需要缓存,这样任何人都可以向我详细解释如何缓存PHP页面?

首先在站点的根目录下创建一个名为cache的文件夹,并使其可写

我有一个名为caching_functions.php的文件,如下所示:

<?
$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

$caching = !$test_server;

function start_caching($page) {

    global $caching;

    $hash = md5($page);

    if ($caching) {
        $cachefile = "cache/".$hash.".html";

        if (file_exists($cachefile)) {
            include($cachefile);
            echo "<!-- Cached on ".gmdate('r', filemtime($cachefile))." to ".$hash." -->";      
            exit;
        } else {
            ob_start();
            return $cachefile;  
        }       
    }
}

function end_caching($cachefile) {
    global $caching;    
    if ($caching) {     
        $fp = fopen($cachefile, 'w'); 
//      fwrite($fp, ob_get_contents());
        fwrite($fp, preg_replace('!\s+!', ' ', str_replace(array("\n", "\t"),"",ob_get_contents())));
        fclose($fp); 

        ob_end_flush();     
    }
}

function remove_cache() {

    foreach (glob($_SERVER['DOCUMENT_ROOT']."/cache/*.*") as $filename) {
        unlink($filename);
    }
}


?>

然后我在每一页的顶部放上:

在底部:

<? end_caching($cachefile); ?>

这使得对页面的第一个请求被转储到缓存文件夹。后续的访问使用缓存的版本,不会访问数据库或执行任何复杂的操作

我将创建一个名为clearcache.php的页面,并包含caching_函数,让它运行remove_cache()。这将允许您在需要时轻松删除缓存文件


这也只在非本地时运行,因此如果要在本地进行测试,请确保将$caching更改为1,或者只在实际服务器上进行测试。

在PHP中进行缓存意味着存储上次调用某个特定函数的结果,以防该函数在同一脚本中被多次调用(使用相同的参数)

然而,我认为最主要和更强大的意义是存储动态生成页面的完整输出,并在再次请求页面时提供该输出,而不是实际运行完整的PHP脚本来重新生成该内容

对于要缓存的页面,我有一个AJAX命令,在生成页面后将内容写入数据库。它还添加了一个到期时间-例如time()+20(20秒后到期)

然后在页面顶部添加一个条件,检查数据库中页面的未过期缓存。如果找到,则返回该值,否则将继续重新生成整个页面

这篇文章帮助我开始:


谢谢Rich Bradshaw,我会检查一下,别忘了使用header()ops.或.htaccess指令将缓存推出给用户。您好,先生@RichBradshaw,我已经尝试过您的缓存代码,但如果我有一个表单,向服务器发送存储值的请求,它会工作吗,或者它会留在缓存中而不执行请求?任何类型的帮助都将非常感激链接是404。