phpcms v9 캐시 파일은 어떻게 생성되나요?
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教程,欢迎在线学习!
위 내용은 phpcms v9 캐시 파일은 어떻게 생성되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











phpcms에서 세부정보 페이지로 이동하는 방법: 1. 헤더 기능을 사용하여 점프 링크를 생성합니다. 2. 콘텐츠 목록을 반복합니다. 3. 콘텐츠의 제목과 세부정보 페이지 링크를 가져옵니다.

PHP CMS는 웹 사이트 콘텐츠 관리를 위한 PHP 기반 오픈 소스 콘텐츠 관리 시스템으로, 사용 편의성, 강력한 기능, 확장성, 높은 보안 및 무료 오픈 소스가 특징입니다. 시간을 절약하고, 웹사이트 품질을 향상시키며, 협업을 강화하고, 개발 비용을 절감할 수 있으며, 뉴스 웹사이트, 블로그, 기업 웹사이트, 전자상거래 웹사이트, 커뮤니티 포럼 등 다양한 웹사이트에서 널리 사용되고 있습니다.

제목: WeChat 로그인 통합 가이드: PHPCMS의 활용 오늘날 인터넷 시대에 소셜 로그인은 웹사이트의 필수 기능 중 하나가 되었습니다. 중국에서 가장 인기 있는 소셜 플랫폼 중 하나인 WeChat의 로그인 기능은 점점 더 많은 웹사이트에서도 사용되고 있습니다. 이 기사에서는 WeChat 로그인 기능을 PHPCMS 웹사이트에 통합하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1단계: WeChat Open Platform 계정 등록 먼저 WeChat Open Platform에 개발자 계정을 등록하고 해당 개발 권한을 신청해야 합니다. 로그인 [위챗 오픈 플랫폼]

phpcms는 완전 무료는 아닙니다. phpcms는 오픈 소스 cms 시스템이지만 오픈 소스는 무료 버전과 상업용 버전의 두 가지 버전이 있습니다. 연구용으로 사용하고, 상업적인 용도라면 일정 비용을 지불해야 합니다.

PHPCMS는 오픈 소스, 모듈성, 유연성, 사용자 친화성 및 커뮤니티 지원을 갖춘 무료 오픈 소스 콘텐츠 관리 시스템(CMS)입니다. 기업 웹사이트, 전자상거래 웹사이트, 블로그, 커뮤니티 포럼 등 다양한 유형의 웹사이트를 만드는 데 사용할 수 있습니다. 기술 요구 사항에는 PHP 5.6 이상, MySQL, MariaDB 또는 PostgreSQL 데이터베이스, Apache 또는 Nginx 웹 서버가 포함됩니다.

phpcms에는 두 가지 잘 알려진 버전이 있습니다. 1. 사용자 정의 URL 규칙을 지원하는 phpCMS4 웹사이트 관리 배경이 아름답고 사용하기 쉬우며 기능을 자유롭게 확장할 수 있는 많은 프런트엔드 플러그인이 있습니다. . 다국어, 다중 사이트 관리, 페이지 관리를 지원하는 phpCMS2008R1 관리자는 편리하고 유연하며 매우 가볍고 빠르게 실행됩니다.

phpcms는 mysql 데이터베이스를 사용합니다. phpcms는 PHP+MYSQL을 기술 기반으로 사용하여 개발된 PHP 오픈 소스 웹사이트 관리 시스템입니다. PHPCMS V9는 OOP 방식을 채택하여 기본 운영 프레임워크를 구축합니다. 지원되는 PHP 버전은 PHP5 이상, 지원되는 MYSQL 버전은 MySql 4.1 이상입니다.

PHPCMS 사용자 이름 보안 설정 전략 공개 웹 사이트 개발에서 사용자 계정 보안은 항상 개발자가 매우 중요하게 생각하는 측면이었습니다. 사용자 이름의 보안 설정도 중요합니다. 사용자 이름은 사용자의 로그인 자격 증명일 뿐만 아니라 사용자의 개인 정보를 노출하고 보안 위험을 초래할 수도 있기 때문입니다. 이 기사에서는 PHPCMS의 사용자 이름 보안 설정 전략을 공개하고 개발자가 참조할 수 있는 구체적인 코드 예제를 제공합니다. 1. 일반적인 사용자 이름을 방지하기 위해 개발자는 사용자 이름의 과도한 사용을 방지해야 합니다.
