标签归档:404.php

巧用404.php解决WordPress耗资源的问题,给WordPress加个缓存功能

刚开始搭建博客的时候,看中了wordpress的功能强大,经过两年的不懈努力,我的小博已经从pr0到pr4(最近降到pr3),有的时候每日pv竟然能到3万,这时idc那边就提醒我好资源了。自己购买了台西数的VPS,配置好后,cpu也是居高不下,首页竟然要4秒钟才能打开。当时考虑到seo,路径使用了http://www.miaoqiyuan.cn/p/wordpress-plus-chc(注意,不是文件夹)的模式,生成静态,路径就变了http://www.miaoqiyuan.cn/p/wordpress-plus-chc/。第一,我不想耗资源,第二,我不想改变路径。
我博客的现在的路径是怎样实现的呢?这个问题请看我以前的一篇文章WordPress无Rewrite用cos-html-cache实现静态化(http://www.miaoqiyuan.cn/p/wordpress-plus-chc)。既然一切皆由404.php起,那么现在就从404.php找切入点,比如在404.php上加个缓存。声明:本文由苗启源发表在他的博客,一切思想皆为苗启源原创,转帖请注明出处。
这个换成怎样加呢?改动源程序也不现实,而且文件太多,太麻烦。这时我想到了前几天写的一篇文章Python 之 XML与文本操作(http://www.miaoqiyuan.cn/p/python-xml-file),在那篇文章中,也是使用了缓存,比如请求http://www.miaoqiyuan.cn/products/,因为没有用到数据库,把请求过的网址记录到一个文本文件,少了还好说,多了就。。。最好的办吧就是把每个URL地址返回的内容保存到MD5(URL)的文件中,如果读取的时候该文件存在,说明已经读取过了,有缓存。python源码请见Python 之 XML与文本操作(http://www.miaoqiyuan.cn/p/python-xml-file)。
这样就好办了,直接按以前说的那种方法。404.php返回的请求路径,我没给md5下,如果存在,就直接读取,不存在,执行程序,然后保存到缓存文件中。下面给出404.php的代码,如果觉得本文对您有所帮助,请Ctrl+D收藏我的博客地址,我最近准备写一个php的缓存类哦。

< ?php
$qs = $_SERVER['QUERY_STRING'];
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80')+3);
$CacheStr = md5($_SERVER['REQUEST_URI']);

if(!$fp=@fopen("./404cache/".$CacheStr.".tmp","r")){
	$getHtml=file_get_contents("http://www.miaoqiyuan.cn/index.php".$_SERVER['REQUEST_URI']);
	$fp=fopen("./404cache/".$CacheStr.".tmp","w");
	fwrite($fp,$getHtml);
	echo $getHtml;
}
echo fread($fp,1100000);
?>

基本功能都实现了。不过更新是个问题,还有缓存数据,我会分别用Mysql数据库,XML文件,文本文件分别存取,关于速率我还要进一步进行测试。文本文件的存储缓存的一个致命的缺点就是最后更新时间,缓存的有效时间不好控制。如果用xml或数据库,这个问题就简单了。好了,现在时间太晚了,就此结笔(键盘)。