thinkphp第1课:使用thinkphp创建一个项目

摘要:
phpdefine;//开启调试模式require;?˃3、下载thinkphp核心包并解压,放在网站根目录下(与orange同级,这样做的目的是为了方便多个项目调用。think的执行流程是怎么样的第一步:引入框架下的thinkphp.php执行入口Think::Start()。

一、thinkphp第一课:
1、在网站根目录下,建立一个项目名称orange;
2、在orange目录下,创建一个入口文件index.php:
<?php
define('APP_DEBUG',true); //开启调试模式
require('../TP/ThinkPHP.php');
?>

3、下载thinkphp核心包并解压,放在网站根目录下(与orange同级,这样做的目的是为了方便多个项目调用。如果你只有一个项目,那么可以放在orange目录下)。我这里文件夹名改成了TP。
4、在浏览器打开 http://localhost/orange/,便可以看到thinkphp的欢迎页面了。
5、同时, 你也会发现,在orange目录下,创建了一系列的目录。

二、浏览器访问 http://localhost/orange/ 时,发生了什么?think的执行流程是怎么样的

(1)第一步:引入框架下的 thinkphp.php
<?php
// ThinkPHP 入口文件
//记录开始运行时间
$GLOBALS['_beginTime'] = microtime(TRUE);
// 记录内存初始使用
// PHP5.2及以后的版本,提供了一个编译选项,允许不编译此函数(memory_get_usage)。也就是有可能不存在此函数,所以先进行判断
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage();
//计算当前应用页面的绝对地址(调用页面所在的目录)
//本实例:APP_PATH项目目录——>D:/www/Apache2.2/htdocs/orange/
defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/');
//计算出运行临时目录;如果手工设定RUNTIME_PATH,则以手工定义的常量为准
//本实例:RUNTIME_PATH临时目录——>D:/www/Apache2.2/htdocs/orange/Runtime/
defined('RUNTIME_PATH') or define('RUNTIME_PATH',APP_PATH.'Runtime/');
//是否开启调试选项,如果定义了常量,则以定义的为准;未定义,则为flase
//如果不开启调试,则在项目目录下有一个~runtime.php的缓存。具体见框架目录下的runtime.php代码
//我们在本地做测试,需要在入口文件开启调试,即修改后立即生效,如果出错,页面会输出详细的错误信息
defined('APP_DEBUG') or define('APP_DEBUG',false); // 是否调试模式
//模式:不同的模式,生成不同的runtime.php。暂时用不着
//比如,定义一个mini,则生成~mini_runtime.php
$runtime = defined('MODE_NAME')?'~'.strtolower(MODE_NAME).'_runtime.php':'~runtime.php';
//根据模式算出运行文件的路径 ~runtime.php
//本实例:RUNTIME_FILE运行文件的路径——>D:/www/Apache2.2/htdocs/orange/Runtime/~runtime.php
defined('RUNTIME_FILE') or define('RUNTIME_FILE',RUNTIME_PATH.$runtime);
if(!APP_DEBUG && is_file(RUNTIME_FILE)) {
// 部署模式直接载入运行缓存
require RUNTIME_FILE;
}else{ //第一次运行时,走这条路线
// 系统目录定义
defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__).'/');
// 加载运行时文件
//THINK_PATH 为框架的路径
require THINK_PATH.'Common/runtime.php';
}

thinkphp.php文件,定义了常量app_name和think_path(大写),并引入runtime.php

(2)第二步,加载框架下的 Common/runtime.php文件
1)、再次定义了一些常量,具体见源码;
2)、创建项目目录结构(由build_app_dir()方法创建;
3)、如果app_dubug设置为false,则把核心加载文件进行编译。否则,删除编译文件,即项目下的~runtime.php文件;
4)、调用框架TP下的 lib/core/Think.class.php 文件——>执行入口 Think::Start()。

(3)第三步,执行框架TP下的 lib/core/Think.class.php 的start()方法
1)、接第二步,开始执行入口文件Think::Start()。包括声明错误处理句柄、异常处理句柄,并声明类的自动加载机制;
2)、Think::buildApp(); //初始化app运行,即项目预编译,加载项目的各种配置文件,大约有10个文件左右。
3)、加载完配置文件后,执行app::run

(4)第四步,执行框架下的 lib/core/App.class.php下的run方法
1)、执行app下init()静态方法:分析url,得出调用哪个控制器。
2)、执行app下exec静态方法:根据计算出来的模型和方法,实例化该module,并执行action相应的方法。本实例找到的项目下 lib/action目录下的 IndexAction.class.php,并执行index()方法。

经过了以上这么多的步骤,我们终于是看到了浏览器上显示的 thinkphp欢迎页面。

免责声明:文章转载自《thinkphp第1课:使用thinkphp创建一个项目》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇k8s入门系列之介绍篇python中正则表达式在中文字符串匹配时的坑下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux内核配置、编译及Makefile简述

Hi,大家好!我是CrazyCatJack。最近在学习Linux内核的配置、编译及Makefile文件。今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核。这里我用到的是linux.2.22.6版本的内核。在Linux下命令行通过tar xjf linux.2.22.6.tar.bz2解压内核。然后,如果你需要对...

Python3 os模块及操作文件和目录

1. os模块相关操作:os模块主要处理操作系统的相关的功能 os.name 获取操作系统平台 os.getcwd() 获取现在的工作目录 os.listdir() 获取某个目录下的所有文件名 os.system() 用来运行shell命令 os.remove() 删除某...

CDH| Cloudera Manager的安装

一.  cloudera manager的概念 简单来说,Cloudera Manager是一个拥有集群自动化安装、中心化管理、集群监控、报警功能的一个工具(软件),使得安装集群从几天的时间缩短在几个小时内,运维人员从数十人降低到几人以内,极大的提高集群管理的效率。 功能: 1)   管理:对集群进行管理,如添加、删除节点等操作。 2)   监控:监控集群...

Ansible进阶

YAML YAML简介   YAML是一个可读性高,并用来表达资料序列的格式。YAML参考了其它多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等   它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言 YAML特性   YAML的可读性好   ...

ClassLoader读取classpath目录下的文件

项目中的需求是根据配置文件创建一个页面,配置文件中配置一些图例或者搜索框。读取classpath目录下文件的方式有很多,且记录自己在项目中用到的一种方式。 ClassLoader主要是对类的请求提供服务,当jvm需要某个类时,它根据名称向ClassLoader请求获得这个类,然后ClassLoader返回给jvm这个类的class对象。ClassLoad...

linux应用之jdk环境的安装(centos)

一、yum安装 1.执行:yum search jdk 已加载插件:fastestmirror, securityLoading mirror speeds from cached hostfile * base: mirror.bit.edu.cn * extras: mirror.bit.edu.cn * updates: mirror.bit.edu...