Comment les fichiers cache phpcms v9 sont-ils générés ?
phpcms v9缓存文件是怎样生成的?
这篇文章介绍phpcms的缓存结构
我并没有做深入的学习,但是phpcms的想法上却是有他的过人之处,太令人折服了,这里分享phpcms缓存的一中实现方案
/include/cache.func.php
这里最先主要是定义了一些phpcms的缓存函数,phpcms的缓存分为,表缓存,模型缓存,模型字段缓存,还有模块缓存,首先这些都是基于表的缓存的。
最开始有一个函数
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; }
这个函数就调用一大堆的缓存函数来生成缓存的。
首先第一个函数 cache_common
大家可以看下面的注释,是将 前缀名_model,前缀名_category ,前缀名_ module,前缀名,前缀名_type,前缀名_area,等等写入到$CACHE数组的对应下表之中 (比如model 表的数据$CACHE["model"]=$arr,$arr为phpcms_model表的数据)
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; //以上是将对应的模块写入$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(); //以上是对应的 model表里的内容写入数组$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数组 $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; //以上是将所有的 类别表里的数据写入$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; //所有的地区表写入$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规则写入缓存 $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; //最后调用cache_write方法将所有的数组写入common.php 位置/date/cache/common.php根据系统变量慧有所改动 cache_write('common.php', $CACHE); return $CACHE; }
phpcms表缓存的实现方式主要是:利用一个叫cache_table函数$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) ;// 表缓存 }
将数据数组写入对应的缓存文件,以上这个函数就是判断下常量CACHE_PATH是否存在默认是data/cache的路径然后用file_put_contents 将缓存的数据写入到对应的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; }
至于其他的可以参照以上的方法进行添加,大家可以查查看对应的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); } //缓存地区列表
生成路径:../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); }
PHP中文网,大量的免费PHPCMS教程,欢迎在线学习!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment accéder à la page de détails dans phpcms : 1. Utilisez la fonction d'en-tête pour générer un lien de saut ; 2. Parcourez la liste de contenu ; 3. Obtenez le lien de la page de titre et de détails du contenu ;

PHP CMS est un système de gestion de contenu open source basé sur PHP pour gérer le contenu de sites Web. Ses fonctionnalités incluent la facilité d'utilisation, des fonctionnalités puissantes, l'évolutivité, une haute sécurité et un open source gratuit. Il permet de gagner du temps, d'améliorer la qualité des sites Web, d'améliorer la collaboration et de réduire les coûts de développement. Il est largement utilisé dans divers sites Web tels que les sites Web d'actualités, les blogs, les sites Web d'entreprise, les sites Web de commerce électronique et les forums communautaires.

Titre : Guide d'intégration de la connexion WeChat : PHPCMS en action À l'ère d'Internet d'aujourd'hui, la connexion sociale est devenue l'une des fonctions essentielles d'un site Web. En tant que l’une des plateformes sociales les plus populaires en Chine, la fonction de connexion de WeChat est également utilisée par de plus en plus de sites Web. Cet article expliquera comment intégrer la fonction de connexion WeChat dans le site Web PHPCMS et fournira des exemples de code spécifiques. Étape 1 : Enregistrez un compte WeChat Open Platform Tout d'abord, nous devons enregistrer un compte de développeur sur WeChat Open Platform et demander les autorisations de développement correspondantes. Connectez-vous [Plateforme ouverte WeChat]

phpcms n'est pas totalement gratuit. phpcms est un système cms open source, mais open source ne signifie pas gratuit. Il existe en deux versions : la version gratuite et la version commerciale. La version gratuite est limitée à un usage personnel non commercial, tandis que la version commerciale nécessite l'achat d'une licence par les particuliers. utilisez-le pour la recherche, et s’il s’agit d’une application commerciale, vous devez payer certains frais.

PHPCMS est un système de gestion de contenu (CMS) gratuit et open source qui propose : open source, modularité, flexibilité, convivialité et support communautaire. Il peut être utilisé pour créer différents types de sites Web, notamment des sites Web d'entreprise, des sites Web de commerce électronique, des blogs et des forums communautaires. Les exigences techniques incluent : PHP 5.6 ou supérieur, base de données MySQL, MariaDB ou PostgreSQL et serveur Web Apache ou Nginx.

Il existe deux versions bien connues de phpcms, à savoir : 1. phpCMS4, qui prend en charge les règles d'URL personnalisées. L'arrière-plan de gestion du site Web est beau et facile à utiliser, et dispose de nombreux plug-ins frontaux, qui peuvent étendre librement les fonctions. .phpCMS2008R1, qui prend en charge la gestion multilingue et multi-sites et le gestionnaire de pages est pratique, flexible, très léger et fonctionne rapidement.

phpcms utilise la base de données MySQL. phpcms est un système de gestion de site Web open source PHP, développé en utilisant PHP+MYSQL comme base technique. PHPCMS V9 adopte la méthode POO pour créer le cadre d'exploitation de base. La version PHP prise en charge est PHP5 et supérieure, et la version MYSQL prise en charge est MySql 4.1 et supérieure.

La stratégie de configuration de la sécurité des noms d'utilisateur PHPCMS révélée Dans le développement de sites Web, la sécurité des comptes d'utilisateurs a toujours été un aspect auquel les développeurs attachent une grande importance. Les paramètres de sécurité du nom d'utilisateur sont également cruciaux, car le nom d'utilisateur ne constitue pas seulement les informations de connexion de l'utilisateur, mais peut également exposer les informations personnelles de l'utilisateur et même entraîner des risques de sécurité. Cet article révélera la stratégie de configuration de la sécurité du nom d'utilisateur dans PHPCMS et donnera des exemples de code spécifiques auxquels les développeurs pourront se référer. 1. Empêcher les noms d'utilisateur courants Afin d'améliorer la sécurité des noms d'utilisateur, les développeurs doivent empêcher les utilisateurs d'en utiliser de manière excessive.
