当前位置:编程学习 > php >>

BroPHP框架阅读笔记

Ps:乡下过年回来神清气爽啊~~闲得蛋疼看看简单的框架实现。
另外也有个小小的计划了先….任何问题请轻拍。
 
第一遍站在开发的角度来读,主要是看功能如何实现。
第二遍站在安全的角度来读,主要是发现这样的写法有何不安全又有何好处。
 
当前进行:
*akcms
*kiwiphp(号称门户级的框架 –-)
 
计划中的:
1.Discuz(大型论坛)
2.phpbb(轻量级论坛)
3.Wordpress(传统PHP写法的Blog)
4.ThinkPHP(MVC轻量级框架的实现方式)
======================================开始-蛋疼的分割线======================================
 
目录结构:
│  index.php

└─brophp
    │  brophp.php
    │
    ├─bases  — 核心类
    │    
    ├─classes — 常用方法类
    │    
    ├─commons
    │      functions.inc.php
    │      success
    │    
    └─libs —smarty类
———————————————————————————————–
Index.php:
 define(“BROPHP”, “./brophp”);  //框架源文件的位置
 define(“APP”, “./”);           //设置当前应用的目录
 require(BROPHP.’/brophp.php’); //加载框架的入口文件
一个单一入口,几乎所有的框架都是这么搞貌似,至少thinkphp是这么来的。
———————————————————————————————–
brophp.php:
 header(“Content-Type:text/html;charset=utf-8″);  //设置系统的输出字符为utf-8
 date_default_timezone_set(“PRC”);       //设置时区(中国)
 /* 这里没啥好说的,设定编码和市区*/
 define(“BROPHP_PATH”, rtrim(BROPHP, ‘/’).’/');     //BroPHP框架的路径
 define(“APP_PATH”, rtrim(APP,’/').’/');            //用户项目的应用路径
 define(“PROJECT_PATH”, dirname(BROPHP_PATH).’/');  //项目的根路径,也就是框架所在的目录
 define(“TMPPATH”, str_replace(array(“.”, “/”), “_”, ltrim($_SERVER["SCRIPT_NAME"], ‘/’)).”/”);
 //script_name = /brophp/index.php
 //包含系统配置文件
 $config=PROJECT_PATH.”config.inc.php”;
 if(file_exists($config)){
  include $config;
 }
 //存在config.inc.php就包含,框架第一次运行会自动创建项目所需要的文件。
 
  //设置Debug模式
 if(defined(“DEBUG”) && DEBUG==1){
  $GLOBALS["debug"]=1;                 //初例化开启debug
  error_reporting(E_ALL ^ E_NOTICE);   //输出除了注意的所有错误报告
  include BROPHP_PATH.”bases/debug.class.php”;  //包含debug类
  Debug::start();                               //开启脚本计算时间
  set_error_handler(array(“Debug”, ‘Catcher’)); //设置捕获系统异常
 }else{
  ini_set(‘display_errors’, ‘Off’);   //屏蔽错误输出
  ini_set(‘log_errors’, ‘On’);              //开启错误日志,将错误报告写入到日志中
  ini_set(‘error_log’, PROJECT_PATH.’runtime/error_log’); //指定错误日志文件
 
 }
 /* 设定调试的相关信息 注释也很详细了*/
 
 //包含框架中的函数库文件
 include BROPHP_PATH.’commons/functions.inc.php’;
 
 //包含全局的函数库文件,用户可以自己定义函数在这个文件中
 $funfile=PROJECT_PATH.”commons/functions.inc.php”;
 if(file_exists($funfile))
  include $funfile;
 /* 如果项目中存在的话,就会包括commons/functions.inc.php 结合第一次自动创建项目文件,您懂得*/
 
 
 //设置包含目录(类所在的全部目录),  PATH_SEPARATOR 分隔符号Linux(:) Windows(;)
 $include_path=get_include_path();                         //原基目录
 $include_path.=PATH_SEPARATOR.BROPHP_PATH.”bases/”;       //框架中基类所在的目录
 $include_path.=PATH_SEPARATOR.BROPHP_PATH.”classes/”;    //框架中扩展类的目录
 $include_path.=PATH_SEPARATOR.BROPHP_PATH.”libs/”;       //模板Smarty所在的目录
 $include_path.=PATH_SEPARATOR.PROJECT_PATH.”classes/”;    //项目中用的到的工具类
 $controlerpath=PROJECT_PATH.”runtime/controls/”.TMPPATH;  //生成控制器所在的路径
 $include_path.=PATH_SEPARATOR.$controlerpath;             //当前应用的控制类所在的目录
 /* get_include_path为PHP函数,此处就是框架所在目录了,加上分隔符放到$include_path变量中*/
 
 set_include_path($include_path);
 /* 包含前面所有的文件,见PHP手册代码:
 $path = ‘/usr/lib/pear’;
 set_include_path(get_include_path() . PATH_SEPARATOR . $path);
 */
 
 //自动加载类 
 function __autoload($className){
  if($className==”memcache”){        //如果是系统的Memcache类则不包含
   return;
  }else if($className==”Smarty”){    //如果类名是Smarty类,则直接包含
   include “Smarty.class.php”;
  }else{                             //如果是其他类,将类名转为小写
   include strtolower($className).”.class.php”;
  }
  Debug::addmsg(“<b> $className </b>类”, 1);  //在debug中显示自动包含的类
 }
 
 /* 然后用__autoload魔术函数自动按类名加载类,如果加载错误的话会利用debug类来输出加载错误的类文件*/
 
 //判断是否开启了页面静态化缓存
 if(CSTART==0){
  Debug::addmsg(“<font color=’red’>没有开启页面缓存!</font>(但可以使用)”);
 }else{
  Debug::addmsg(“开启页面缓存,实现页面静态化!”);
 }
 
 //启用memcache缓存
 if(!empty($memServers)){
  //判断memcache控制是否安装
  if(class_exists(“memcache”)){
   $mem=new MemcacheModel($mem
补充:综合编程 , 安全编程 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,