PHPCMS源码分析(二)

index.php中引入了phpcms框架的入口文件,下面我们看下这个入口文件

 

/phpcms/base.php

define('IN_PHPCMS', true);//防止恶意调用//PHPCMS框架路径
define('PC_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);         
//重新定义网站根目录
if(!defined('PHPCMS_PATH')) define('PHPCMS_PATH', PC_PATH.'..'.DIRECTORY_SEPARATOR);//缓存文件夹地址
define('CACHE_PATH', PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR);
//主机协议
define('SITE_PROTOCOL', isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://');
//当前访问的主机名
define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''));
//来源
define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');//系统开始时间
define('SYS_START_TIME', microtime());

 

以上这段代码主要定义了一些常量,不做过多解释。下面我们来看看公共函数库的加载。

//加载公用函数库
pc_base::load_sys_func('global');
pc_base::load_sys_func('extention');
pc_base::auto_load_func();

 

利用pc_base中的静态方法来调用函数库。具体的实现方法如下:

/*** 加载系统的函数库* @param string $func 函数库名*/
public static function load_sys_func($func) {return self::_load_func($func);
}/*** 加载函数库* @param string $func 函数库名* @param string $path 地址*/
private static function _load_func($func, $path = '') {static $funcs = array();if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'functions';$path .= DIRECTORY_SEPARATOR.$func.'.func.php';$key = md5($path);if (isset($funcs[$key])) return true;if (file_exists(PC_PATH.$path)) {include PC_PATH.$path;} else {$funcs[$key] = false;return false;}$funcs[$key] = true;return true;
}

 

以上函数的调用方法值得学习的地方是函数的加载方式。把函数加载进来之后放入到静态变量$funcs这个数组中,在下次调用时就不需要到文件中重新调用,而是直接在内存中调用就可以了。

/*** 自动加载autoload目录下函数库* @param string $func 函数库名*/
public static function auto_load_func($path='') {return self::_auto_load_func($path);
}
/*** 加载函数库* @param string $func 函数库名* @param string $path 地址*/
private static function _auto_load_func($path = '') {if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'functions'.DIRECTORY_SEPARATOR.'autoload';$path .= DIRECTORY_SEPARATOR.'*.func.php';$auto_funcs = glob(PC_PATH.DIRECTORY_SEPARATOR.$path);if(!empty($auto_funcs) && is_array($auto_funcs)) {foreach($auto_funcs as $func_path) {include $func_path;}}
}

 

以上代码是需要自动加载的函数库的加载方法,可以学习的是利用glob()函数加载'lib/functions/autoload/'目录下的所有函数文件。

转载于:https://www.cnblogs.com/zhangdaqian/p/3536370.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 5.6密钥_MySQL的密钥文件不正确

我遇到了InnoDB的问题(表是最初的MyISAM,但是之前将它转换为InndoB)表;我正在尝试运行此查询:SELECTposts.id,posts.post_titleFROMrss_posts AS postsINNER JOIN rss_feeds AS feeds ON posts.blog_idfeeds.idWHEREfeeds.blog_language1ORDER BYposts.post_date_db…

JS-取出字符串中重复次数最多的字符并输出

/**取出字符串中重复字数最多的字符 */ var words sdfghjkfastgbyhnvdstyaujskgfdfhlaa;      //创建字符串 var word,                          //单个字符length;                          //该字符的长度 //…

windows下查看静态库和动态库的导出函数

在window下查看动态库的导出函数可以用vs自带的Depends工具; 查看静态库的信息要用命令行来实现: dumpbin /LINKERMEMBER Test.lib > 1.txt 上面的功能是将静态库的信息导出保存在1.txt文件中,这样就可以在1.txt文件中查看相关的信…

linux ll 文件大小单位_该如何改善 Linux 系统性能?

系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它…

深入Javascript中apply、call、bind

最近在看一下node package的源码,发现很多里面都包含了function这个对象的apply、call、bind这三个方法,于是想拿出来再看看。。 apply、call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context&#x…

优秀案例!教您如何设计现代简约风格网页

我们看到越来越多的设计师开始拥抱简约的网站设计方法,消除网站不必要的元素,保留真正重要的内容,干净、直观的设计,就像今天的我们将展示的这些网站。 下面是一组不同风格的简约设计的网站例子,美丽的导航、整洁的菜单…

怎么清理mysql的死链接_什么是死链接?如何正确处理死链接

什么是死链接?我们应该如何正确处理死链接呢?小刚SEO为你解答。什么是死链接?因链接更改或搜索引擎所收录的网站路径被删除了,形成没法打开的死链接。死链接的危害:1.死链数据过多时,对网站访问体验和用户转…

数据分页和使用存储过程的数据分页

--使用存储过程的数据分页 --pageSize 一页有多少条 --pageIndex 第几页 --totalCount 总共有多少条 --分页的第一种方法 select top(10) * from Ams_Area where ar_id not in ( Select top(0) ar_id from Ams_Area order by ar_id ) order by ar_id --分页的第二种方…

mysql generaton_Mysql 集成随机唯一id mysql unique number generation

一句代码:SELECT FLOOR(10000 RAND() * 89999) AS random_numberFROM table1WHERE "random_number" NOT IN (SELECT unique_id FROM table2)LIMIT 1随机生成5位数字,并且不重复。上面的代码真是给人无限的联想力。例如:function g…

NavMeshAgent 动态加载障碍物

如果你想让游戏人物绕开一些物体, 这些物体动态生成出来的.只需要给物体添加NavMeshObstacle组件即可 1. 绿色方块添加NavMeshObstacle组件 2. 红色方块没有添加NavMeshObstacle组件,被小球穿透了%>_<% 转载于:https://www.cnblogs.com/plateFace/p/4385629.html

多任务 schedule python_Python3.6 Schedule 模块定时任务 (实例讲解)

Python3.6 Schedule 模块定时任务 (实例讲解)Python 是一种面向对象解释型计算机程序设计语言, 由 Guido van Rossum 于 1989 年底发明, 第一个公开发行版发行于 1991 年 Python 语法简洁而清晰, 具有丰富和强大的类库它常被昵称为胶水语言, 它能够把用其他语言制作的各种模块 …

UVa 11468 (AC自动机 概率DP) Substring

将K个模板串构成一个AC自动机&#xff0c;那些能匹配到的单词节点都称之为禁止节点。 然后问题就变成了在Tire树上走L步且不经过禁止节点的概率。 根据全概率公式用记忆化搜索求解。 1 #include <cstdio>2 #include <cstring>3 #include <queue>4 using name…

mysql 检查点_my05_mysql检查点简述

简单描述一下mysql 检查点&#xff0c;对mysql数据库恢复的理解有所帮助。数据库版本mysql> selectversion();-----------| version() |-----------| 8.0.11 |-----------1 row in set (0.00 sec)检查点查看mysql>show engine innodb status\G;---LOG---Log sequence num…

VS2010无法执行自动化测试解决方案

在实际的工作过程中&#xff0c;当你发现你的VS2010无法执行自动化测试用例&#xff0c;刚好你发现你的电脑安装有VS2012&#xff0c;那么好了&#xff0c;请卸载你的VS2012再试试...转载于:https://www.cnblogs.com/captainR/p/3566751.html

停止Hadoop或HBase集群的脚本

#!/bin/sh #echo "waring" #read NAME #等待用户输入并把输入的值付给NAME NAME$1 #将脚本第一个参数赋给NAME #引用变量时加上"{}",是个好习惯,利于shell辨别变量边界 if [ -z ${NAME} ] ; then #执行脚本没有输入参数,默认关闭hadoopstop-all.sh elif [ …

css 伪元素分享!!!

最近接触到的css 伪元素觉得还算不错 分享下&#xff1a; 1、清楚内盒浮动设置&#xff1a; .back_list ul{padding:12px 0 0 12px;zoom:1;} .back_list ul:after{clear: both;content: ".";display: block;height: 0;visibility: hidden;}/*清楚内盒浮动设置*/ 2、伪…

公钥和私钥 java_公钥与私钥 - yxhxj2006 - BlogJava

评论# re: 公钥与私钥 [未登录]2014-01-08 17:43workeruseful for me 回复 更多评论# re: 公钥与私钥2014-04-18 11:05Eva特别棒&#xff01; 谢谢&#xff01;worker回复 更多评论# re: 公钥与私钥 [未登录]2014-06-11 17:10mike# re: 公钥与私钥2014-11-10 17:05游客太有用…

zepto学习之路--源代码提取

最近在看zepto的源代码&#xff0c;把一些有用的函数摘出来&#xff0c;看看zepto是怎么实现的&#xff0c;自己做的时候也可以用。说实话&#xff0c;zepto的实现有一些看起来还是很晦涩的&#xff0c;可能是自己的水平不够&#xff0c;看不透作者的真正的意图。 1、zepto的正…

java byte 整数_java整数与byte数组的转换实现代码

java整数与byte数组的转换实现代码这里对java中整数与byte数组的转换进行了实现&#xff0c;平时的项目中很少用的到&#xff0c;但是特定需求的时候还是需要的&#xff0c;这里就记录下&#xff0c;亲测可用&#xff0c;实现代码&#xff1a;public class NumberUtil {/*** in…

蓝桥杯 花朵数

一个N位的十进制正整数&#xff0c;如果它的每个位上的数字的N次方的和等于这个数本身&#xff0c;则称其为花朵数。 例如&#xff1a; 当N3时&#xff0c;153就满足条件&#xff0c;因为 1^3 5^3 3^3 153&#xff0c;这样的数字也被称为水仙花数&#xff08;其中&#xff0…