标签归档:WordPress

巧用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或数据库,这个问题就简单了。好了,现在时间太晚了,就此结笔(键盘)。

WordPress无Rewrite用cos-html-cache实现静态化

WordPress是一个非常不错的博客程序(不然本人页不用啊~),但是有一个缺点~插件安装多了就显示的很慢,但是还有很多插件不得不装,比如本人是个程序员,在网站上发布自己的心得,前几天写了域名批量查询工具by苗启源:http://miaoqiyuan.cn/p/yuming-query/,想要吧代码高亮的形式显示,安装了WP-Syntax:http://wordpress.org/extend/plugins/wp-syntax/,这样每次有用户请求页面就很变的很慢,甚至导致用户不能正常访问。这时候实现程序的静态化是一个不错的选择~

在网上狂搜一番,口碑最好的是cos-html-cache(http://wordpress.org/extend/plugins/cos-html-cache/),其最新版本为2.5,需要服务器支持Rewrite才能实现,但是国内虚拟主机基本上都是Window主机IIS平台,很少有支持Rewrite(IIS需要ISAPI Rewrite支持),难道国内的WrodPress只能用Liunx虚拟主机才能实现吗?我们Windows主机就没有静态化的权利?

经过笔者一番测试,终于实现了用WordPress不使用Rewrite实现静态化的方法(http://miaoqiyuan.cn/p/wordpress-plus-chc)

1.下载cos-html-cache 1.1(http://downloads.wordpress.org/plugin/cos-html-cache.1.1.zip),解压,传到/wp-content/plugins/目录,在后台”插件”中启用”cos-html-cache”

2.在”设置”永久选项中,自定义结构修改静态化的规则,本站为/p/%postname%/

3.在”设置”-“CosHtmlCache” 生成静态。看到这里,可能有的读者会说这和网上的很多文章一样,不就是网上的文章Copy了一份吗?这样是实现了内容页的静态化,点分类的时候就开始提示出错了~因为CosHtmlCache1.1只支持文章页首页的静态化,没有这个页面自然不能访问咯。解决方法嘛,请往下看:

4.现在虚拟主机都支持404页面自定义,所以~~聪明的你想到了吧?如果访问已经生成的静态页,自然能正常访问,不能生成的呢?提交参数给index.php,这样就实现了服务器不支持Rewrite实现静态化的目的了,下面是功能实现的代码:

我的空间支持404.asp,所以先发个404.asp的代码

&lt; %
'ASP_Rewrite with 404 By MiaoQiyuan
 
'定义WordPress的处理页面,也可以是"/?"
PHP_Resource="/index.php/"
 
'获取服务器地址,这样可以实现多域名访问
Hst_Svr=Request.Servervariables("HTTP_HOST")
'获取服务器端口,防止
Hst_Pot=Request.Servervariables("SERVER_PORT")
'构造网址
Hst=Hst_Svr&amp;":"&amp;Hst_Pot
'构成404错误提交给404.asp的请求,因为服务器不一样,大家可以自己根据自己的虚拟主机测试一下
Err_404="404;http://"&amp;Hst&amp;"/"
Res_Get=Request.QueryString
'用真实404.asp的请求的错误信息(包括错误的请求地址)替换掉构成404错误,就剩下了请求的相对地址
Fnk_Get=Replace(Res_Get,Err_404,"")
 
'如果不为空,吧Fnk_Get提交给定义WordPress的处理页面
If Request.QueryString&lt;&gt;"" then
	Response.Redirect PHP_Resource&amp;Fnk_Get
Else
	Response.Redirect PHP_Resource&amp;"404.php"
End if
%&gt;

下面说一下普通404.htm实现上述功能,因为html不能直接获取端口域名,所以我们用JS调用的方法,404.htm页面的代码只有一行

<script src="404_js.asp" type="text/javascript"><!--mce:0--></script>

404_js.asp的代码如下

&lt; %
&lt;%
'ASP_Rewrite with 404,Javascript By MiaoQiyuan
 
'定义WordPress的处理页面,也可以是"/?"
PHP_Resource="/index.php/"
 
'获取服务器地址,这样可以实现多域名访问
Hst_Svr=Request.Servervariables("HTTP_HOST")
'获取服务器端口,防止
Hst_Pot=Request.Servervariables("SERVER_PORT")
'构造网址
Hst=Hst_Svr&amp;":"&amp;Hst_Pot
'构成404错误提交给404.asp的请求
Err_404="404;http://"&amp;Hst&amp;"/"
%&gt;
<!--
var _Err;
if(location.search){
	_Err=location.search.replace("?<%=Err_404%>","");
}
else{
	_Err=location.href.replace("http://< %=Hst%>/","");
	_Err=location.href.replace("http://< %=Hst_Svr%>/","");
}
 
location.href="< %=PHP_Resource%>"+_Err;
-->

为什么不是用CosHtmlCache2.5?
因为CosHtmlCache2.0以上的版本都是根据Rewrite第一次访问自动生成,比如这篇文章,/p/wordpress-plus-chc,第一次访问,因为没有页面跳到/index.php/p/wordpress-plus-chc,这样文件路径就是/index.php/p/wordpress-plus-chc,而不是/p/wordpress-plus-chc,所以导致不能生成,而CosHtmlCache1.1是在文章创建的时候根据设置中的路径生成。

如果服务器仅支持404.htm是否有生成的必要?
在不考虑搜索引擎收录的情况下,可以使用,如果想要搜索引擎较好的收录,建议不要使用。404.htm只能通过JavaScript在浏览器中识别,而在搜索引擎中只能看到<script type=”text/javascript” src=”404_js.asp”></script>,如果支持404.asp就能较好的收录