wordpress使用了大量插件,随着时间推移,数量庞大的图片和文章,甚至是历史遗留的冗余组件等严重影响网站响应速度!
站长们一般用的是WP Super Cache或者Hyper Cache什么的,
原理是直接将网站的页面生成静态的html页面,然后使用Mod_rewrite将请求转发到静态文件,这样就跳过了php解析这一步直接将页面吐出到浏览器,从而达到加速的效果。但是这是使用插件实现缓存效果,那么可否无插件实现呢?
首先复制以下代码:
<?php
define('CACHE_ROOT', dirname(__FILE__).'/cache');
define('CACHE_LIFE', 3600); //缓存文件的生命期,单位秒,3600秒是一小时
define('CACHE_SUFFIX','.html'); //缓存文件的扩展名,千万别用 .php .asp .jsp .pl 等等
$file_name = md5($_SERVER['REQUEST_URI']).CACHE_SUFFIX; //缓存文件名
//缓存目录,根据md5的前两位把缓存文件分散开。避免文件过多。如果有必要,可以用第三四位为名,再加一层目录,尽可能少文件夹,以免影响性能。
$cache_dir = CACHE_ROOT.'/'.substr($file_name,0,3);
$cache_file = $cache_dir.'/'.$file_name; //缓存文件存放路径
if($_SERVER['REQUEST_METHOD']=='GET'){ //GET方式请求才缓存,POST之后一般都希望看到最新的结果
if(file_exists($cache_file) && time() - filemtime($cache_file) < CACHE_LIFE){ //如果缓存文件存在,并且没有过期,就把它读出来。
$fp = fopen($cache_file,'rb');
fpassthru($fp);
fclose($fp);
exit();
}
elseif(!file_exists($cache_dir)){
if(!file_exists(CACHE_ROOT)){
mkdir(CACHE_ROOT,0777);
chmod(CACHE_ROOT,0777);
}
mkdir($cache_dir,0777);
chmod($cache_dir,0777);
}
function auto_cache($contents){ //回调函数,当程序结束时自动调用此函数
global $cache_file;
$fp = fopen($cache_file,'wb');
fwrite($fp,$contents);
fclose($fp);
chmod($cache_file,0777);
clean_old_cache(); //生成新缓存的同时,自动删除所有的老缓存。以节约空间。
return $contents;
}
function clean_old_cache(){
chdir(CACHE_ROOT);
foreach (glob("*/*".CACHE_SUFFIX) as $file){
if(time()-filemtime($file)>CACHE_LIFE){
unlink($file);
}
}
}
ob_start('auto_cache'); //回调函数 auto_cache
}
else{
if(file_exists($cache_file)){ //file_exists() 函数检查文件或目录是否存在。
unlink($cache_file); //不是GET的请求就删除缓存文件。
}
}
?>
将以上代码保存为cache.php文件然后放置到网站的目录(不是主题的目录!),然后在根目录下再创建一个名为cache的目录,权限更改为777(修改权限可写,写入缓存文件用的)
然后在网站根目录的index.php的<?php之后加上以下代码:
require('cache.php');
一定要保证缓存目录的可写。
一定要加到文件的最上方,不然等页面完全加载完了才吐出缓存页面那就等于没缓存一样。
但是问题来了!当你登陆之后,就会自动缓存登录状态,,这样其他用户访问的时候自动就是登陆的!
解决方法:
找到主题下的 comments.php 文件,删除登陆状态判断代码
<!--?php if ( $user_ID ) : ?--> <!--?php endif; ?-->
每个主题都不一样,我这个主题这两句代码位置如下图:
这样,其他用户就不会显示登陆状态了
但是!还有一点,新的评论会因为缓存而需要等到缓存过期才能显示出来,而且不知道为什么,cache.php的缓存过期设置有时候不发挥作用,因此需要设置一个定时任务
简单粗暴
rm -rf /你网站的绝对路径/cache/*
至于多久删一次,就看你个人喜好了
这又是扒过来的不完整版emmm 我差点被炸了 这bug会保存你登录状态
你在自己那登录管理员 其他人打开看到的也一样是管理员的 我搜索了其他作者的
ces 😳 啊