一、thinkphp第一课:

1、在网站根目录下,建立一个项目名称orange;

2、在orange目录下,创建一个入口文件index.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

// 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用来做什么项目_thinkphp第1课:使用thinkphp创建一个项目相关推荐

  1. 手把手做一个JSP入门程序(二):创建一个项目(JSP)

    创建一个项目 我们使用Eclipse和Web服务器的Tomcat进行开发.Eclipse我们需要用"Eclipse IDE for Java EE Developers"(Ecli ...

  2. 项目经理怎么在两周内熟悉一个项目的业务?

    项目经理空降到一个进行中的项目,怎么在两周内熟悉一个项目的业务? 四步帮你解决:明确项目业务目标,了解系统功能模块,弄清系统核心业务流程,多使用系统. 一.明确项目业务目标 明确项目业务目标,也就是了 ...

  3. 安卓入门系列-02创建一个项目

    利用Android Studio创建一个项目 说明 Android Studio 是项目式开发,和eclipse有所不同,需要习惯. 创建项目 点击第一行,创建一个新项目. 在1处填入项目名称,2处填 ...

  4. [vue-cli]怎么使用vue-cli3创建一个项目?

    [vue-cli]怎么使用vue-cli3创建一个项目? 直接 vue create 项目名 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 ...

  5. Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,

    Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,和SVN没有关 ...

  6. myeclipse需要配置服务器得项目是,【SpringMVC】使用Myeclipse创建SpringMVC项目【超详细教程】...

    之前一直是使用Eclipse创建Web项目,用IDEA和MyEclipse的创建SpringMVC项目的时候时不时会遇到一些问题,这里把这个过程记录一下,希望能帮助到那些有需要的朋友.我是用的是MyE ...

  7. Vue.js 学习笔记十二:Vue CLI 之创建一个项目

    目录 创建一个项目 创建一个项目 运行以下命令来创建一个新项目: vue create vuecli-demo 你会被提示选取一个 preset.你可以选默认的包含了基本的 Babel + ESLin ...

  8. 使用scrapy创建一个项目爬取网易云音乐的所有歌手的相关资料

    1.创建一个项目 scrapy startproject 项目名称 我的项目叫Neteasy_music,所以命令是scrapy startproject Neteasy_music 2.创建一个爬虫 ...

  9. Pr Pro如何创建一个项目?

    Pr Pro如何创建一个项目?    Pr Pro是一款非常强大的视频编辑软件,提供色彩.音频和图形工具,还可与其他应用程序和服务顺畅地配合使用.Premiere Pro以其强大的操作,简洁的页面深受 ...

最新文章

  1. 【OpenCV 】反向投影
  2. 潜移默化学会WPF(转载篇二)--退出应用程序
  3. linux gstack pstack 进程运行堆栈查看工具
  4. python到底可以做什么-Python到底可以做什么?
  5. 【风控流程】大数据风控代码逻辑
  6. Ubuntu20.04 远程桌面共享vnc
  7. Coursera吴恩达《神经网络与深度学习》课程笔记(4)-- 浅层神经网络
  8. How to Configure centralized logging for the NSX Manager 6.x.x, NSX Controllers and NSX Edge devices
  9. Linux中创建 静态库和动态库(共享库) 本人亲测可行
  10. github每次push时自动输入用户名密码
  11. 08cms php5.6,大型房产门户08cms单城市商业版V8.4(带升级补丁),带手机独家放送,去除后门优化响应...
  12. Swin-Transformer-Object-Detection V2.11.0环境搭建(一)
  13. 【MATLAB】MATLAB 仿真 — 窄带高斯白噪声
  14. 时区相关-这一篇全了解
  15. 微信wifi服务器地址,从零开始改造路由器实现微信连WIFI的功能(七):更简单的认证服务器wifidog-server...
  16. Java设计模式之——适配器
  17. 东原仁知服务招股书失效:主营业务严重依赖迪马集团,曾多次更名
  18. 数据备份与数据还原 ----数据库的异地容灾策略
  19. JavaWeb--用户注册登录案例
  20. 大数据技术之HFDS

热门文章

  1. Navicat Premium 实用快捷键
  2. codeforce gym 100548H The Problem to Make You Happy
  3. [Swift]loadNibNamed方法
  4. MySQL源码解读之数据结构-LF_DYNARRAY
  5. UDT中select异常
  6. fopen、fwrite使用
  7. HTTP和HTTPS详解
  8. C语言,谁都能看得懂的归并排序
  9. linux platform 驱动模型分析
  10. 博客目录列表(C与Linux部分)