您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcmsv9源码解析content模块下的index.php文件init()方法解析
紫真2025-06-12phpcms教程已有人查阅
导读在了解index.php中的init函数的时候,让我们先看看最开始的几行代码我的这个index.php文件绝对路径是这样当我直接打开的时候 ,提示错误,
在了解index.php中的init函数的时候,让我们先看看最开始的几行代码
1-5 第二行,
http://localhost/phpcms/phpcms/modules/content/index.php
当我直接打开的时候 ,提示错误,
3-5行, 分别定义了CACHE_MODEL_PATH 模型缓存路径
加载了 content模块里面的util.func.php文件
接下来就是index类,在这个文件里,我们将初窥phpcms的模板机制
7 先定义了一个私有变量 $db;
8-13 构造函数中 先加载了 content_model模型,这个模型我们先放着,不去了解
接着就是cookie判断,在param类中,其中cookie都是加密的,加密函数在global.func.php函数库中
然后就是init()函数了
从16-27行,大家应该都能看懂,先是站点设置,其中 $siteid=1 为默认站点
然后
这个seo 我也没有注意,朋友可以自行看下。
重点是从28-31行,这4行代码引出了很多东西,因为函数传参的不同,会导致逻辑很大的不同。
所以我们先按照这个默认里面的传参来进行下去。
那么说默认是文件缓存,是不是可以为memcache呢?或者其他,
然后加载了memcache的配置信息就可以直接用了呢?只是打开下思路,现在不去深究
我们来看代码吧!!
那么大家想到了什么,对,里面应该有茫茫多的 ,茫茫多的静态属性吧!
然后if($config)默认的是空,而且我们也没有传参,直接往下走
但其实,如果改变下参数就发现,程序就变得大不一样,现在我们不去做改变,先去了解下这个系统,
所以我们按照最开始的步骤走下去,这个函数直接return了这个对象,然后掉用了get_cache方法
那么(!isset($this->cache_list[$cache_name])) 这段代码为真,后面的!is_object 是个深深的疑问
返回了
根据这个type类型的不同,可以选择不同的缓存,这里不多讲了,有兴趣的朋友自己研究下了
那么
那么
接下来的代码比较简单
1-5 第二行,
defined('IN_PHPCMS') or exit('Nopermission resources');
我的这个index.php文件绝对路径是这样http://localhost/phpcms/phpcms/modules/content/index.php
当我直接打开的时候 ,提示错误,
No permission resources.
这是phpcms 单一入口的体现,文件不能直接访问,必须遵守phpcms的规则3-5行, 分别定义了CACHE_MODEL_PATH 模型缓存路径
加载了 content模块里面的util.func.php文件
接下来就是index类,在这个文件里,我们将初窥phpcms的模板机制
7 先定义了一个私有变量 $db;
8-13 构造函数中 先加载了 content_model模型,这个模型我们先放着,不去了解
接着就是cookie判断,在param类中,其中cookie都是加密的,加密函数在global.func.php函数库中
然后就是init()函数了
从16-27行,大家应该都能看懂,先是站点设置,其中 $siteid=1 为默认站点
然后
define('SITEID',$siteid);
这3个变量,前面已经稍稍带过了这个seo 我也没有注意,朋友可以自行看下。
重点是从28-31行,这4行代码引出了很多东西,因为函数传参的不同,会导致逻辑很大的不同。
所以我们先按照这个默认里面的传参来进行下去。
$sitelist=getcache('sitelist','commons');
我们进入global.func.php来看下这个函数
/**
* 读取缓存,默认为文件缓存,不加载缓存配置。
* @param string $name 缓存名称
* @param $filepath 数据路径(模块名称)
* @param string $config 配置名称 getcache('sitelist','commons');
*/
function getcache($name, $filepath='', $type='file', $config='') {
pc_base::load_sys_class('cache_factory','',0);
if($config) {
$cacheconfig = pc_base::load_config('cache');
$cache = cache_factory::get_instance($cacheconfig)->get_cache($config);
} else {
$cache = cache_factory::get_instance()->get_cache($type);
}
return $cache->get($name, '', '', $filepath);
}
先看看原著的解释 读取缓存,默认是文件缓存,不加载缓存配置。那么说默认是文件缓存,是不是可以为memcache呢?或者其他,
然后加载了memcache的配置信息就可以直接用了呢?只是打开下思路,现在不去深究
我们来看代码吧!!
pc_base:load_sys_class('cache_factory','',0);
加载cache_factory(缓存工厂类),参数0代表不实例化,那么大家想到了什么,对,里面应该有茫茫多的 ,茫茫多的静态属性吧!
然后if($config)默认的是空,而且我们也没有传参,直接往下走
$cache=cache_factory::get_instance()->get_cache($type);
没办法,打开cache_factory.class.php,直接找到get_instance()
/**
* 返回当前终级类对象的实例
* @param $cache_config 缓存配置
* @return object $cache = cache_factory::get_instance()->get_cache($type);
*/
public static function get_instance($cache_config = '') {
if(cache_factory::$cache_factory == '' || $cache_config !='') {
cache_factory::$cache_factory = new cache_factory();
if(!empty($cache_config)) {
cache_factory::$cache_factory->cache_config = $cache_config;
}
}
return cache_factory::$cache_factory;
}
大家看一下代码按照现在我们的逻辑程序走下去,发现这个函数撒也没做,到之后又返回了这个对象但其实,如果改变下参数就发现,程序就变得大不一样,现在我们不去做改变,先去了解下这个系统,
所以我们按照最开始的步骤走下去,这个函数直接return了这个对象,然后掉用了get_cache方法
/**
* 获取缓存操作实例
* @param $cache_name 缓存配置名称 //file
*/
public function get_cache($cache_name) {
if(!isset($this->cache_list[$cache_name]) || !is_object($this->cache_list[$cache_name])) {
$this->cache_list[$cache_name] = $this->load($cache_name);
}
return $this->cache_list[$cache_name];
}
在global.func.php中
$cache=cache_factory::get_instance()->get_cache($type)
其中 $type=file那么(!isset($this->cache_list[$cache_name])) 这段代码为真,后面的!is_object 是个深深的疑问
$this->cache_list[$cache_name]=$this->load($cache_name);就是
$this->cache_list['file']=$this->load('file')
到这里,我们又不得不进入load()函数里面瞧瞧了
/**
* 加载缓存驱动
* @param $cache_name 缓存配置名称
* @return object //file
*/
public function load($cache_name) {
$object = null;
if(isset($this->cache_config[$cache_name]['type'])) {
switch($this->cache_config[$cache_name]['type']) {
case 'file' :
$object = pc_base::load_sys_class('cache_file');
break;
case 'memcache' :
define('MEMCACHE_HOST', $this->cache_config[$cache_name]['hostname']);
define('MEMCACHE_PORT', $this->cache_config[$cache_name]['port']);
define('MEMCACHE_TIMEOUT', $this->cache_config[$cache_name]['timeout']);
define('MEMCACHE_DEBUG', $this->cache_config[$cache_name]['debug']);
$object = pc_base::load_sys_class('cache_memcache');
break;
case 'apc' :
$object = pc_base::load_sys_class('cache_apc');
break;
default :
$object = pc_base::load_sys_class('cache_file');
}
} else {
$object = pc_base::load_sys_class('cache_file');
}
return $object;
}
我们细看这个函数,发现在第一个判断的时候就不能往下执行 ,返回了
$object=pc_bace::load_sys_class('cache_file')
那我们细看下这个判断语句发现 phpcms的缓存机制有很多,memcache,apc根据这个type类型的不同,可以选择不同的缓存,这里不多讲了,有兴趣的朋友自己研究下了
那么
$cache = cache_factory::get_instance()->get_cache($type);
$cache 就是实例化的cache_file.class.php那么
return $cache->get($name, '', '', $filepath);
就是
$cache->get('sitelist','','','commons');
我们进入cache_file.class.php 查看get()函数
/**
* 获取缓存
* @param string $name 缓存名称
* @param array $setting 缓存配置
* @param string $type 缓存类型
* @param string $module 所属模型
* @return mixed $data 缓存数据 return $cache->get('sitelist', '', '', 'commons');
*/
public function get($name, $setting = '', $type = 'data', $module = ROUTE_M) {
$this->get_setting($setting);
if(empty($type)) $type = 'data';
if(empty($module)) $module = ROUTE_M;
$filepath = CACHE_PATH.'caches_'.$module.'/caches_'.$type.'/';
$filename = $name.$this->_setting['suf'];
if (!file_exists($filepath.$filename)) {
return false;
} else {
if($this->_setting['type'] == 'array') {
$data = @require($filepath.$filename);
} elseif($this->_setting['type'] == 'serialize') {
$data = unserialize(file_get_contents($filepath.$filename));
}
return $data;
}
}
$this->get_setting($setting)
找到get_setting函数,因为$setting为空,所以函数没有执行接下来的代码比较简单
$type='data' $module='commons';
$filepath=phpcms\caches\caches_commons\caches_data
$filename=sitelist.cache.php
下面的是个判断
if(!file_exists($filepath.$filename)){return false;}
在这里文件是存在的,那么程序继续
if($this->_setting['type']=='array'){
$data=@require($filepath.$filename);
}elseif($this->_setting['type']=='serialize'){
$data=unserizlize(file_get_contents($filepath.$filename));
}
本文标签:
很赞哦! ()
下一篇:phpcms配置404页面的方法
图文教程
phpcms服务器安全认证错误的原因和修复方法
问题:phpcms通过后台上传附件或图片时就出现了“服务器安全认证错误”,上传不成功。错误原因:因为app_path没有修改,导致app_path的值跟前面几个值不一致,所以上传图片的时候
phpcms实现动态价格实现方法代码示例
什么是动态价格(自命名)?--一般来说商品有个固定的价格,随着节假日或者促销活动可能会发生价格变化,结束后又恢复原价,如果每次价格变化都需要修改价格,那么不仅在时间上不好把握
phpcmsv9密码重试次数太多,请过-xxx分钟后重新登录的解决方法
PHPCMSV9“密码重试次数太多,请过-xxx分钟后重新登录!”的解决办法找到文件\phpcms\modules\admin\index.php
phpcmsv9判断用户是否登录的解决方法
phpcms v9判断用户是否登录?phpcms v9如何判断用户是否登录以及登陆后的标签写法问题
相关源码
-
(PC+WAP)绿色环保设备环保企业网站模板源码下载基于PbootCMS内核开发的响应式企业模板,为环保设备制造、环境技术服务等企业打造,通过模块化设计实现多行业快速适配。查看源码 -
(PC+WAP)铝合金门窗定制pbootcms网站模板源码为铝合金门窗、定制门窗企业打造的高性能网站模板,基于PbootCMS开源内核开发,采用HTML5自适应架构,PC与手机端数据实时同步,覆盖全终端用户交互场景。查看源码 -
(PC+WAP)红色户外岗亭钢结构岗亭pbootcms网站模板为钢结构岗亭、户外设施企业打造的高端响应式营销门户,基于PbootCMS开源内核深度开发,采用HTML5自适应架构,实现PC与移动端数据实时同步展示。查看源码 -
自适应LED照明外贸灯具灯泡灯具英文网站模板该外贸灯具网站模板专为LED照明、灯具出口企业定制,采用PbootCMS内核开发,提供高效建站方案。通过响应式设计和SEO优化能力,帮助企业低成本构建专业外贸展示平台。查看源码 -
(自适应)html5中英双语通用机械设备pbootcms模板下载本模板基于PbootCMS内核精心开发,为机械设备制造企业量身打造。设计风格大气稳重,充分展现机械行业的专业特质与技术实力。采用HTML5技术构建,支持中英文双语切换,满足国际化业务需求。整站布局合理,充分展示企业产品、案例与服务,帮助访客快速了解企业核心优势。查看源码 -
(自适应响应式)超市仓储仓库货架展架网站pbootcms源码下载本模板为货架展架、仓储货架行业量身打造,采用PbootCMS内核开发,充分考虑了货架产品展示和企业形象展示的需求。模板设计简洁大方,突出产品特点,能够有效展示各类货架产品的规格参数和应用场景,帮助访客快速了解企业核心业务和产品优势。查看源码
| 分享笔记 (共有 篇笔记) |
