也想出現在這里?聯系我們

非插件搞定wordpress生成靜態緩存文件

2014.04.30 wordpress教程 ,
  • 文章介紹
  • 升級版本
  • 評價&建議

教程介紹

說起wordpress生成靜態緩存的話首先想到的就是WP Super Cache插件,確實如此,大多數的wordpress站長們都在使用,但是永遠都有那些糾結完美派的人,不喜歡用插件的人也十分的多,而今天介紹的非插件搞定wordpress生成靜態緩存文件方法,即可為大家去掉這款強大的wordpress緩存插件WP Super Cache的使用!

首先說下,WP Super Cache的工作原理吧,該插件的Mod_rewrite加速模式加速效果非常好,因為這種模式是直接將網站的頁面生成靜態的html頁面,然后使用Mod_rewrite將請求轉發到靜態文件,這樣就跳過了php解析這一步直接將頁面吐出到瀏覽器,從而達到加速的效果。

而今天介紹的教程,幾乎和上面的工作原理相同,再配合CDN等加速類的使用的話,效果將十分的明顯,提速100%啊!

教程操作

  1. <?php
  2. define('CACHE_ROOT',?dirname(__FILE__).'/cache');
  3. define('CACHE_LIFE',?86400);???????????????????//緩存文件的生命期,單位秒,86400秒是一天
  4. define('CACHE_SUFFIX','.html');?????????????//緩存文件的擴展名,千萬別用?.php?.asp?.jsp?.pl?等等
  5. $file_name??=?md5($_SERVER['REQUEST_URI']).CACHE_SUFFIX;????//緩存文件名
  6. //緩存目錄,根據md5的前兩位把緩存文件分散開。避免文件過多。如果有必要,可以用第三四位為名,再加一層目錄。
  7. //256個目錄每個目錄1000個文件的話,就是25萬個頁面。兩層目錄的話就是65536*1000=六千五百萬。
  8. //不要讓單個目錄多于1000,以免影響性能。
  9. $cache_dir??=?CACHE_ROOT.'/'.substr($file_name,0,2);
  10. $cache_file?=?$cache_dir.'/'.$file_name;????//緩存文件存放路徑
  11. if($_SERVER['REQUEST_METHOD']=='GET'){??????//GET方式請求才緩存,POST之后一般都希望看到最新的結果
  12. ????if(file_exists($cache_file)?&&?time()?-?filemtime($cache_file)?<?CACHE_LIFE){???//如果緩存文件存在,并且沒有過期,就把它讀出來。
  13. ????????$fp?=?fopen($cache_file,'rb');
  14. ????????fpassthru($fp);
  15. ????????fclose($fp);
  16. ????????exit();
  17. ????}
  18. ????elseif(!file_exists($cache_dir)){
  19. ????????if(!file_exists(CACHE_ROOT)){
  20. ????????????mkdir(CACHE_ROOT,0777);
  21. ????????????chmod(CACHE_ROOT,0777);
  22. ????????}
  23. ????????mkdir($cache_dir,0777);
  24. ????????chmod($cache_dir,0777);
  25. ????}
  26. ????function?auto_cache($contents){?????????//回調函數,當程序結束時自動調用此函數
  27. ????????global?$cache_file;
  28. ????????$fp?=?fopen($cache_file,'wb');
  29. ????????fwrite($fp,$contents);
  30. ????????fclose($fp);
  31. ????????chmod($cache_file,0777);
  32. ????????clean_old_cache();??????????????????//生成新緩存的同時,自動刪除所有的老緩存。以節約空間。
  33. ????????return?$contents;
  34. ????}
  35. ????function?clean_old_cache(){
  36. ????????chdir(CACHE_ROOT);
  37. ????????foreach?(glob("*/*".CACHE_SUFFIX)?as?$file){
  38. ???????????if(time()-filemtime($file)>CACHE_LIFE){
  39. ???????????????unlink($file);
  40. ???????????}
  41. ????????}
  42. ????}
  43. ????ob_start('auto_cache');?????????????????//回調函數?auto_cache
  44. }
  45. else{
  46. ????if(file_exists($cache_file)){???????????//file_exists()?函數檢查文件或目錄是否存在。
  47. ????????unlink($cache_file);????????????????//不是GET的請求就刪除緩存文件。
  48. ????}
  49. }
  50. ?>

代碼里都有注釋,將代碼保存為cache.php文件,然后將其放到網站的根目錄下,切記,是網站根目錄,非wordpress主題的根目錄!然后給網站根目錄創建個cache文件夾,給予777的寫入權限

 

然后將代碼

  1. require('cache.php');

放到根目錄的index.php的<?php之后

這樣,就會自動的在cache文件里生成靜態文件了,然后大家可以配合七牛的加速給予cache文件加速,效果將能夠有很明顯的提速!

有用1
  • 2014.04.30初次和大家見面了!

已擁有6人對該主題的建議

  1. 0樓
    我愛WP:

    對,樓主,四樓的這個問題如何解決啊

    2015-03-08 下午 10:26 [回復]
  2. 這個方法確實比較快,但是在登錄情況下第一次訪問網頁的話,之后其他人訪問的時候,也會顯示頂部的工具欄和顯示已登錄,以及登錄的用戶名。

    2014-08-17 下午 2:56 [回復]
  3. 不錯,可以折騰一下

    2014-07-15 下午 1:48 [回復]
  4. 0樓
    kk:

    有更高級的辦法么,可以手動更新緩存的

    2014-07-01 上午 1:04 [回復]
  5. 0樓
    ake:

    記得 WP Super Cache的Mod_rewrite 模式應該是適用在Apache php上的,Nginx 會提示沒有Mod_rewrite模塊,這個有辦法解決嗎
    然后這方法和memcache能共用嗎

    2014-05-30 下午 1:51 [回復]

發表評論

還能輸入240個字

Hi, 歡迎加入Wordpress技術交流群,帶你裝逼帶你飛!

我要入群
也想出現在這里?聯系我們
wordpress加速

我來推薦一個更牛逼的給你看看?

  • 猛戳我吧
夫妇野外交换HD高清版,免费A片在线观看,亚洲精品国产自在现线,中国老妇人60OLDMANTV