PHP搭建自己的web框架-程序初始化
来源:互联网 发布:华东理工大学网络教育 编辑:程序博客网 时间:2024/06/07 02:57
程序初始化,在把控制权交给控制器之前需要完成的工作,一般只做初始化工作,不做与业务有关的事情。
具体有:
1. 定义入口相关的环境变量
2. 加载配置文件和引导文件
3. 加载全局方法、通用类文件
4. 设置环境变量、执行全局初始方法
5. 路由设置、路由执行
因为统一入口,没有特别处理的情况下,每个请求都需要执行初始化工作,如果大部分请求都做了与自己无关的初始化,那是一种浪费。所以在这个初始化过程中,所做的事情不要太多,只做通用的处理,比如网站参数定义、网站环境变量设置。对于一些与业务有关的配置文件,在具体业务时按需要引入。并且在初始化引入的功能都应该能延迟加载、延迟实例化。
下面会作些说明,其中的代码或文件名为示例,仅供参考。
1. 定义入口相关的环境变量
现在,单文件入口是比较常用的做法,方便统一控制。比如程序主目录下面一个index.php文件作为统一入口。
有了统一的入口,那就有了一个程序路径上的基准,以此使用绝对路径来包括文件(据说使用绝对路径比相对路径效率高):
define ( 'APP_PATH', dirname ( __FILE__ ) . '/' );
当然,这个定义可以放到同级目录的其它文件当中,需要尽早地定义,其它的路径变量都以APP_PATH为前缀。
2. 加载配置文件和引导文件
define ( 'PATH_CONFIG', APP_PATH. 'config/' );require PATH_CONFIG . 'config.php';
同时导入引导文件bootstrap.php
require APP_PATH.'bootstrap.php';
<?php/** * 引导程序。 * */define ( 'PATH_FRAMEWORK', APP_PATH . 'framework/' );define ( 'PATH_PUBLIC', APP_PATH . 'public/' );define ( 'PATH_RUNTIME', APP_PATH . 'runtime/' );//[站点域名设置]define ( 'APP_DOMAIN', $_SERVER ['SERVER_NAME'] );if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){ define ( 'APP_HOST', 'https://' . APP_DOMAIN . '/' );}else if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){define ( 'APP_HOST', 'https://' . APP_DOMAIN . '/' );}else{define ( 'APP_HOST', 'http://' . APP_DOMAIN . '/' );}/** * 静态文件的根目录URL前缀*/define ( 'URL_PUBLIC', '/public/' );/** * 运行时根目录URL前缀,存放日志,缓存,临时文件等。*/define ( 'URL_RUNTIME', '/runtime/' );
config.php:
<?php//[网站更新时间,用于更新css,js等]if (! defined ( 'UPDATE_TIME' )) { define ( 'UPDATE_TIME', '20140820' );}//[cookie域名设置]define ( 'DOMAIN_NAME', '' );//数据库定义define ( 'DB_USER', 'root' );define ( 'DB_PASSWORD', '123456' );define ( 'DB_SERVER', 'localhost' );define ( 'DB_NAME', '' );define ( 'DB_PORT', '' );//DB是否持久连接:true or falsedefine ( 'DB_PERSISTENT', false );//日志define ( 'MAX_LOG_QUANTITY', 5 );define ( 'MAX_LOG_SIZE', "1000000" );defined ( 'DEBUG_MODE' ) or define ( 'DEBUG_MODE', true );define ( 'LOG_REALFILE', PATH_RUNTIME . "log/debug.log" );//是否显示PHP错误define ( 'PHP_DISPLAY_ERRORS', true );define ( 'PHP_ERROR_REPORTING', E_ALL ^ E_NOTICE );define ( 'MAIL_HOST', 'smtp.exmail.qq.com' );define ( 'MAIL_PORT', '465' );define ( 'MAIL_USER_NAME', '' );define ( 'MAIL_USER_PASSWD', '' );define ( 'MAIL_FROM_NAME', '' );define ( 'MAIL_SMTP_AUTH', true );define ( 'MAIN_SMTP_PROTOCOL', 'ssl' );
3. 加载全局方法、通用类文件
继续在bootstrap.php文件,引入框架文件、通用功能模块文件。
把全局方法定义文件、数据库操作、session操作等网站都会用到的文件导入进来:
require PATH_CORE . 'session/Session.php';require PATH_CORE . 'db/DBFactory.php';require PATH_CORE . 'func/glb_function.php';require PATH_CORE . 'page/Router.php';
最好是引用的文件中不要有自动执行的方法,这样会失去控制。
4. 设置环境变量、执行全局初始方法
ob_start ();date_default_timezone_set('PRC');sanitize();us_init ();if (PHP_DISPLAY_ERRORS) {error_reporting ( PHP_ERROR_REPORTING );}//register_shutdown_function ( 'runtimeLog' );set_exception_handler ( 'exception_handler' );set_error_handler ( 'error_handler' );
5. 路由设置、路由执行
<?phpdefine ( 'APP_PATH', dirname ( __FILE__ ) . '/' );define ( 'PATH_CONFIG', APP_PATH . 'config/' );require PATH_CONFIG . 'config.php';require APP_PATH.'bootstrap.php';define ( 'APP_ACTION', APP_PATH . 'app/web/' );$r = new Router ();$r->setOption ( array ('base_path' => APP_ACTION ) );$r->add ( '/', 'get', 'index', APP_ACTION . 'page/index.php' );$r->start ();
- PHP搭建自己的web框架-程序初始化
- PHP搭建自己的web框架-前言
- PHP搭建自己的web框架-总体概述
- PHP搭建自己的web框架-路由
- PHP搭建自己的web框架-控制器
- PHP搭建自己的web框架-视图/模板引擎
- 搭建自己的PHP框架
- 使用PHP搭建自己的MVC框架
- 使用PHP搭建自己的MVC框架
- 使用PHP搭建自己的MVC框架
- 使用PHP搭建自己的MVC框架
- 使用php搭建自己的MVC框架
- 使用PHP搭建自己的MVC框架
- 使用PHP搭建自己的MVC框架
- 使用PHP搭建自己的MVC框架
- PHP搭建自己的MVC框架 1
- PHP搭建自己的MVC框架 2
- 如何自己成功搭建一个SSM框架的WEB项目
- <C>Josephus问题——用循环链表解决
- golang database 全局
- <LeetCode OJ> 189. Rotate Array
- 安卓StateMachine学习笔记--待续
- 4.虚拟机ubuntu网络问题汇总
- PHP搭建自己的web框架-程序初始化
- iOS音频开发
- malloc free new delete 赋值构造函数相关使用及区别
- Angularjs + Requirejs 完整的手脚架
- MD5Util开发工具类
- 一些相关概念
- linux下的用户管理小结
- C++ Primer 学习笔记——IO类
- 解决:Android Studio 不能预览