成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

phpcmsv9緩存文件是如何生成的

phpcms v9緩存文件是如何生成的?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!

為撫遠等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及撫遠網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、撫遠網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

phpcms v9緩存文件是怎樣生成的?

這篇文章介紹phpcms的緩存結(jié)構(gòu)

我并沒有做深入的學(xué)習(xí),但是phpcms的想法上卻是有他的過人之處,太令人折服了,這里分享phpcms緩存的一中實現(xiàn)方案

/include/cache.func.php

這里最先主要是定義了一些phpcms的緩存函數(shù),phpcms的緩存分為,表緩存,模型緩存,模型字段緩存,還有模塊緩存,首先這些都是基于表的緩存的。

最開始有一個函數(shù)

function cache_all()
{
@set_time_limit(600);
cache_common();
cache_module();
cache_model();
cache_category();
cache_area();
cache_type();
cache_member_group();
    cache_role();
cache_author();
cache_keyword();
cache_copyfrom();
cache_pos();
    cache_status();
cache_workflow();
tags_update();
return TRUE;
}

這個函數(shù)就調(diào)用一大堆的緩存函數(shù)來生成緩存的。

首先第一個函數(shù) cache_common

大家可以看下面的注釋,是將 前綴名_model,前綴名_category ,前綴名_ module,前綴名,前綴名_type,前綴名_area,等等寫入到$CACHE數(shù)組的對應(yīng)下表之中 (比如model 表的數(shù)據(jù)$CACHE["model"]=$arr,$arr為phpcms_model表的數(shù)據(jù))

function cache_common()
{
global $db;
$data = array();
$result = $db->query("SELECT `module`,`name`,`path`,`url`,`iscore`,`version` FROM `".DB_PRE."module` WHERE `disabled`=0");
while($r = $db->fetch_array($result))
{
   if(!$r['path']) $r['path'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/';
   if(!$r['url']) $r['url'] = $r['module'] == 'phpcms' ? '' : $r['module'].'/';
   $data[$r['module']] = $r;
}
$db->free_result($result);
$CACHE['MODULE'] = $data;
//以上是將對應(yīng)的模塊寫入$CACHE;
$data = array();
$result = $db->query("SELECT * FROM `".DB_PRE."model` WHERE `disabled`=0");
while($r = $db->fetch_array($result))
{
   $data[$r['modelid']] = $r;
}
$db->free_result($result);
$CACHE['MODEL'] = $data;
$data = array();
//以上是對應(yīng)的 model表里的內(nèi)容寫入數(shù)組$CACHE;
$result = $db->query("SELECT `catid`,`module`,`type`,`modelid`,`catname`,`style`,`image`,`catdir`,`url`,`parentid`,`arrparentid`,`parentdir`,`child`,`arrchildid`,`items`,`citems`,`pitems`,`ismenu`,`letter` FROM `".DB_PRE."category` WHERE 1 ORDER BY `listorder`,`catid`");
while($r = $db->fetch_array($result))
{
   $r['url'] = url($r['url']);
   $data[$r['catid']] = $r;
}
$db->free_result($result);
$CACHE['CATEGORY'] = $data;
//以上是將所有的欄目寫入$CACHE數(shù)組
$data = array();
$result = $db->query("SELECT `typeid`,`modelid`,`module`,`name`,`style`,`typedir`,`url` FROM `".DB_PRE."type` WHERE 1 ORDER BY `listorder`,`typeid`");
while($r = $db->fetch_array($result))
{
   $data[$r['typeid']] = $r;
}
$db->free_result($result);
$CACHE['TYPE'] = $data;
//以上是將所有的 類別表里的數(shù)據(jù)寫入$CACHE
$data = array();
$result = $db->query("SELECT `areaid`,`name`,`style`,`parentid`,`arrparentid`,`child`,`arrchildid` FROM `".DB_PRE."area` WHERE 1 ORDER BY `listorder`,`areaid`");
while($r = $db->fetch_array($result))
{
   $data[$r['areaid']] = $r;
}
$db->free_result($result);
$CACHE['AREA'] = $data;
//所有的地區(qū)表寫入$CACHE;
$data = array();
$result = $db->query("SELECT `urlruleid`,`urlrule` FROM `".DB_PRE."urlrule` WHERE 1 ORDER BY `urlruleid`");
while($r = $db->fetch_array($result))
{
   $data[$r['urlruleid']] = $r['urlrule'];
}
$db->free_result($result);
$CACHE['URLRULE'] = $data;
//將所有的url規(guī)則寫入緩存
$data = array();
    $r = $db->get_one("SELECT `setting` FROM `".DB_PRE."module` WHERE `module`='phpcms'");
$setting = $r['setting'];
eval("\$PHPCMS = $setting;");
if($PHPCMS['siteurl'] =='') $PHPCMS['siteurl'] = SITE_URL;
$CACHE['PHPCMS'] = $PHPCMS;
//最后調(diào)用cache_write方法將所有的數(shù)組寫入common.php 位置/date/cache/common.php根據(jù)系統(tǒng)變量慧有所改動
cache_write('common.php', $CACHE);
    
return $CACHE;
}

phpcms表緩存的實現(xiàn)方式主要是:利用一個叫cache_table函數(shù)$table是要緩存的表名,$fileds 是查詢的字段名字,默認為 ' * ',$where sql語句中的where 子句,$order 排序, $isline是否開啟字段緩存默認為不開啟,如果開啟表字段緩存和表緩存將同時進行

function cache_table($table, $fields = '*', $valfield = '', $where = '', $order = '', $iscacheline = 0, $number = 0)
{
global $db;
$keyfield = $db->get_primary($table);
$data = array();
if($where) $where = " WHERE $where";
if(!$order) $order = $keyfield;
$limit = $number ? "LIMIT 0,$number" : '';
$result = $db->query("SELECT $fields FROM `$table` $where ORDER BY $order $limit");
$table = preg_replace("/^".DB_PRE."(.*)$/", "", $table);
while($r = $db->fetch_array($result))
{
   if(isset($r['setting']) && !empty($r['setting']))
   {
    $setting = $r['setting'];
    eval("\$setting = $setting;");
    unset($r['setting']);
    if(is_array($setting)) $r = array_merge($r, $setting);
        }
   $key = $r[$keyfield];
   $value = $valfield ? $r[$valfield] : $r;
   $data[$key] = $value;
   if($iscacheline) cache_write($table.'_'.$key.'.php', $value); //表字段緩存
}
$db->free_result($result);
cache_write($table.'.php', $data) ;// 表緩存
}

將數(shù)據(jù)數(shù)組寫入對應(yīng)的緩存文件,以上這個函數(shù)就是判斷下常量CACHE_PATH是否存在默認是data/cache的路徑然后用file_put_contents 將緩存的數(shù)據(jù)寫入到對應(yīng)的cachefile中

function cache_write($file, $array, $path = '')
{
if(!is_array($array)) return false;
$array = "<?php\nreturn ".var_export($array, true).";\n?>";
$cachefile = ($path ? $path : CACHE_PATH).$file;
$strlen = file_put_contents($cachefile, $array);
@chmod($cachefile, 0777);
return $strlen;
}

至于其他的可以參照以上的方法進行添加,大家可以查查看對應(yīng)的cache.func.php

//緩存模型表
function cache_model()
{
cache_table(DB_PRE.'model', '*', '', '', 'modelid', 1);
}
//緩存分類表生成文件路徑是../data/cachecategory_catid.php
function cache_category()
{
cache_table(DB_PRE.'category', '*', '', '', 'listorder,catid', 1);
}

緩存類別表生成路徑

../data/cache/type_typeid.php
function cache_type()
{
cache_table(DB_PRE.'type', '*', '', '', 'listorder,typeid', 1);
}
//緩存地區(qū)列表

生成路徑:../data/cache/area_areaid.php

function cache_area()
{
cache_table(DB_PRE.'area', '*', '', '', 'listorder,areaid', 1);
}
//緩存用戶組表
//生成路徑:../data/cache member_grounp_group_id.php
function cache_member_group()
{
cache_table(DB_PRE.'member_group', '*', '', '', 'groupid', 1);
cache_table(DB_PRE.'member_group', '*', 'name', '', 'groupid', 0);
}
//緩存角色表
//生成路徑:../data/cache/role_roleid.php
function cache_role()
{
cache_table(DB_PRE.'role', '*', 'name', '', 'listorder,roleid');
}
//緩存作者表
//生成路徑:../data/cache/author_authorid.php
function cache_author()
{
cache_table(DB_PRE.'author', '*', 'name', '', 'listorder,authorid', 0, 100);
}
function cache_keyword()
{
cache_table(DB_PRE.'keyword', '*', 'tag', '', 'listorder,usetimes', 0, 100);
}
function cache_copyfrom()
{
cache_table(DB_PRE.'copyfrom', '*', '', '', 'listorder,usetimes', 0, 100);
}
function cache_pos()
{
cache_table(DB_PRE.'position', '*', 'name', '', 'listorder,posid', 0);
}

感謝各位的閱讀!看完上述內(nèi)容,你們對phpcms v9緩存文件是如何生成的大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

名稱欄目:phpcmsv9緩存文件是如何生成的
文章分享:http://jinyejixie.com/article24/jjeije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、關(guān)鍵詞優(yōu)化面包屑導(dǎo)航、網(wǎng)站收錄網(wǎng)站改版、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
缙云县| 渭南市| 韶山市| 桑植县| 建昌县| 汤原县| 顺昌县| 德令哈市| 赤峰市| 阿坝县| 景洪市| 安西县| 历史| 库尔勒市| 昭平县| 嫩江县| 色达县| 鄂州市| 九江县| 萨迦县| 南昌县| 昆明市| 阿拉尔市| 江陵县| 和顺县| 怀化市| 子洲县| 松溪县| 江门市| 潞西市| 叶城县| 富裕县| 沁阳市| 陆丰市| 来凤县| 湄潭县| 白水县| 洛扎县| 孝昌县| 沙湾县| 大新县|