这个框架是我一个做PHP的朋友“祥子”介绍给我的,Git地址https://coding.net/u/srar/p/AMP/git

下面从入口文件 总线程 ( index.php )开始进行分析

  1. <?php
  2.  
  3. define ('_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR); // 网站根目录
  4. define ('_Amysql', _ROOT . 'Amysql' . DIRECTORY_SEPARATOR); // 系统目录
  5. define ('_Controller', _ROOT . 'Controller' . DIRECTORY_SEPARATOR);      // 控制器目录
  6. define ('_Model', _ROOT . 'Model' . DIRECTORY_SEPARATOR); // 模型目录
  7. define ('_Class', _ROOT . 'Class' . DIRECTORY_SEPARATOR); // 对象类目录
  8. define ('_View', _ROOT . 'View' . DIRECTORY_SEPARATOR); // 视图模板目录
  9. define ('_PathTag', '/'); // 载入下级目录文件标识 例如: 需载入 Model/user/vip.php 即使用 _mode('user/vip');
  10.  
  11. define ('_Host', (empty($_SERVER["HTTPS"]) || $_SERVER['HTTPS'] == 'off' ? 'http://' : 'https://') . $_SERVER['HTTP_HOST']); // 主机网址
  12. define ('_Http', _Host . str_ireplace('/index.php', '', $_SERVER['SCRIPT_NAME']) . '/'); // 网站根目录网址
  13.  
  14. include(_Amysql . 'Config.php');  //配置文件
  15. include(_Amysql . 'Amysql.php');  //网站进程
  16. include(_Amysql . 'Function.php'); //内置函数
  17.  
  18. $Amysql = new Amysql();
  19. $Amysql -> AmysqlProcess = new AmysqlProcess();
  20. $Amysql -> AmysqlProcess -> ProcessStart();
  21. $Amysql -> AmysqlProcess -> ControllerStart();
  22.  
  23. ?>

这是主入口文件,因此就定义了一些全局变量,比如根目录地址ROOT,系统目录啊什么的。然后就把配置文件啊,框架主进程啊,内置函数啊使用include引入进来了。

在这里我要说一下,其实按照我的想法,引入框架中的这种重要文件时还是使用require比较好,因为require时如果文件不存在会抛出一个致命性错误,将程序终止掉,但是include会继续执行,可能会造成下面更多的错误,而且对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次。这就意味着如果可能执行多次的代码,则使用require()效率比较高。

局部解释:

① dirname(__FILE__):__FILE__这是PHP的一个内置魔术变量,作用就是返回当前文件所在地址,dirname(__FILE__)作用就是返回当前文件所在目录地址。

② DIRECTORY_SEPARATOR:这是由于在Windows环境中目录的分割线为"\",而Linux中是"/",这就造成了框架在不同环境中不适用的问题,所以使用DIRECTORY_SEPARATOR来自动判断是使用"\"还是"/"。

③ empty($_SERVER["HTTPS"])||$_SERVER["HTTPS"]=='off':网上有一部分PHPer不是很理解什么时候$_SERVER["HTTPS"]=='off',在这里给解释一下,如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值,所以就有了前面的那一个判断,需要注意的是当使用 IIS 上的ISAPI 方式时,如果不是通过 HTTPS 协议被访问,这个值将为 off

还有$_SERVER["HTTPS"]我个人认为转换一下大小写,全部使用小写比较好 strtolower($_SERVER['HTTPS'])

④ str_ireplace:str_replace的忽略大小写版本。

⑤ $_SERVER["SCRIPT_NAME"]:包含当前脚本的路径。这在页面需要指向自己时非常有用。与__FILE__ 常量不同的地方在于__FILE__包含当前脚本(例如包含文件)的完整路径和文件名。

下面是配置文件 ./Amysql/Config.php 这个文件没什么好分析的 都是定义了一些变量,直接上代码了

  1. <?php
  2.  
  3. // 系统基本配置 **********************************************
  4. $Config['HttpPath'] = false; // 是否开启 index.php/Controller/Action/name/value 模式
  5. $Config['Filter'] = true; // 是否过滤 $_GET、$_POST、$_COOKIE、$_FILES
  6. $Config['XSS'] = true; // 是否开启 XSS防范
  7. $Config['SessionStart'] = true; // 是否开启 SESSION
  8. $Config['DebugPhp'] = true; // 是否开启PHP运行报错信息
  9. $Config['DebugSql'] = false; // 是否开启源码调试Sql语句
  10. $Config['CharSet'] = 'utf-8'; // 设置网页编码
  11. $Config['UrlControllerName'] = 'c'; // 自定义控制器名称 例如: index.php?c=index
  12. $Config['UrlActionName'] = 'a'; // 自定义方法名称 例如: index.php?c=index&a=IndexAction
  13. $Config['Index'] = 'index.php'; // 入口文件
  14. $Config['CacheType'] = 'Memcache'; //缓存类型 File, Memcache
  15.  
  16. // 默认使用数据库配置 *****************************************
  17.  
  18. $Config['ConnectTag'] = 'default'; // Mysql连接标识 可同时进行多连接
  19. $Config['Host'] = 'localhost'; // Mysql主机地址
  20. $Config['User'] = 'root'; // Mysql用户
  21. $Config['Password'] = 'root'; // Mysql密码
  22. $Config['DBname'] = 'test'; // 数据库名称
  23.  
  24. // 文件缓存配置 **********************************************
  25. $Config['CacheFileDir'] = './Cache/'; // 文件缓存路径
  26. $Config['CacheDefaultTime'] = 3600; // 默认缓存时间
  27.  
  28. // Memcache缓存配置 ****************************************
  29. $Config['MemcacheHost'] = '127.0.0.1'; // Memcache主机地址
  30. $Config['MemcachePort'] = 11211; // Memcache主机端口

下一节将分析Amysql的主要进程~

一步步搭建自己的轻量级MVCphp框架-(二)一个国产轻量级框架Amysql源码分析(1)的更多相关文章

  1. 一步步搭建自己的轻量级MVCphp框架-(三)一个国产轻量级框架Amysql源码分析(2) 进程

    Amysql类 按照我的理解这就是框架的初始化 上代码 class Amysql { public $AmysqlProcess; public function Amysql() { global ...

  2. 一步步搭建自己的轻量级MVCphp框架-(四)一个国产轻量级框架Amysql源码分析(3) 总进程对象

    AmysqlProcess类,框架的总进程对象 ./Amysql/Amysql.php 下面还是和以前一样,先上代码~ class AmysqlProcess { public $AmysqlCont ...

  3. Python的Django框架完成一个完整的论坛(源码以及思路)

    一个完整的论坛,登录.注册.发表.头像.点赞.评论.分页.阅读排行等 使用Django2,Python3.5 开发工具:Pycharm5 需要的知识:Python基础知识,Django原理的理解以及使 ...

  4. Django搭建及源码分析(三)---+uWSGI+nginx

    每个框架或者应用都是为了解决某些问题才出现旦生的,没有一个事物是可以解决所有问题的.如果觉得某个框架或者应用使用很不方便,那么很有可能就是你没有将其使用到正确的地方,没有按开发者的设计初衷来使用它,当 ...

  5. Rpc框架dubbo-client(v2.6.3) 源码阅读(二)

    接上一篇 dubbo-server 之后,再来看一下 dubbo-client 是如何工作的. dubbo提供者服务示例, 其结构是这样的!dubbo://192.168.11.6:20880/com ...

  6. 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  7. 框架-spring源码分析(一)

    框架-spring源码分析(一) 参考: https://www.cnblogs.com/heavenyes/p/3933642.html http://www.cnblogs.com/BINGJJF ...

  8. Android源码分析(五)-----如何从架构师的角度去设计Framework框架

    一 : 架构与程序 软件架构是一种思维方式,而程序只是实现思维方式的一种手段,代码固然重要,但是若没有整体的思维架构,一切程序都如水中浮萍. 二 : 框架如何设计 暂时抛开Android Framew ...

  9. 模块化系列教程 | 深入源码分析阿里JarsLink1.0模块化框架

    1. 概述 1.1 模块动态加载卸载主流程 2. 模块动态加载 2.1 模块加载源码分析 2.1.1 AbstractModuleRefreshScheduler 2.1.2 ModuleLoader ...

随机推荐

  1. Ext_两种处理服务器端返回值的方式

    1.Form表单提交返回值处理 //提交基本信息表单  f.form.submit({      clientValidation:true,      //表单提交后台处理地址      url:' ...

  2. MyEclipse使用总结——使用MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

  3. Codeforces Gym 100463E Spies 并查集

    Spies Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Desc ...

  4. hdu5072 2014 Asia AnShan Regional Contest C Coprime

    最后一次参加亚洲区…… 题意:给出n(3 ≤ n ≤ 105)个数字,每个数ai满足1 ≤ ai ≤ 105,求有多少对(a,b,c)满足[(a, b) = (b, c) = (a, c) = 1] ...

  5. 你真的会使用SQL Server的备份还原功能吗?之一:恢复模型

    在SQL Server中,除了系统数据库外,你创建的每一个数据库都有三种可供选择的恢复模型: Simple(简单), full(完整), bulk-logged(批量日志). 下面这条语句可以显示出所 ...

  6. 调用百度地图Api实现的查看地图功能的小插件

    1. 功能 bMap.js 可根据地理位置调用出百度地图,采用弹出框形式 2.用法 var city = '青岛市'; var address = '香港中路'; bMap.init({ city : ...

  7. iOS企业应用Profile制作流程

    第一步:企业版iDP申请完成以后,访问iOS Dev Center:https://developer.apple.com/devcenter/ios/index.action 第二步:点击Log I ...

  8. shadow fight 1.6.0 内购

    shadow fight 之前的版本只需要安装LocallApstore即可内购. 1.6.0的版本中加了越狱检查. 所以LocallApstore 无法直接使用. 需要安装xcon避开越狱检查. 也 ...

  9. org.apache.hadoop.conf-Configurable

    从包名可以看出这个包里面都是配置相关的类:从类名上可以看出这是一个接口,或者说配置类接口.内容很少. package org.apache.hadoop.conf; /** Something tha ...

  10. html元素英文含义

    常用html标签的英语全称及简单功能描述 <a>:anchor 定义锚 <abbr>:abbreviation 定义缩写 <acronym>: 定义只取消首字母的缩 ...