一、thinkphp第一课:
1、在网站根目录下,建立一个项目名称orange;
2、在orange目录下,创建一个入口文件index.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欢迎页面。