thinkphp用来做什么项目_thinkphp第1课:使用thinkphp创建一个项目

一、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欢迎页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1005. K 次取反后最大化的数组和

1. 题目 给定一个整数数组 A,我们只能用以下方法修改该数组: 我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改数组后,返回数…

Server操作Mxd文件详细讲解

Server操作Mxd文件详细讲解Server发布地图都是基于Mxd去发布的,这点与IMS使用axl文件差不多。一般来说,发布后mxd尽可能不要修改,或者在通过使用arcMap进行编辑后在重新发布。修改mxd会导致地图服务发生变化,因此,相对…

知识图谱入门知识(五)【转】秒懂词向量Word2Vec的本质

博文: 秒懂词向量Word2Vec的本质 什么是Word2Vec? 词性标注:是动词还是名词,样本(x,y)中,x是词语,y是它们的词性 f(x)->y 中的f(…

af_netlink_2、netlink简介

Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE)&am…

LeetCode 819. 最常见的单词

1. 题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。 返回出现次数最多,同时不在禁用列表中的单词。 题目保证至少有一个词不在禁用列表中,而且答案唯一。 禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分…

Java代码优化方案 J2ME内存优化

从几本书上,N个网站上整理的一些JAVA代码优化方案,最近的项目只有1M内存可用,必须很抠门了~J2ME项目更要注意的 避免内存溢出 l 不用的对象释放(置空) 如 : a不为空时 anew object()//这句代码执行时将有两个对象存在于内存中 较…

was 程序jvm_【保家护行航】WAS知识学习分享

文/王文平保家护行航:航是护航,是保障人真抓实干,持之以恒,切实做好运维保障本职工作,守护农行生产安全的务本崇实;航是领航,是保障人敬业敏学,精益求精,努力提高运维管理…

LeetCode 824. 山羊拉丁文

1. 题目 给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。 我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。 山羊拉丁文的规则如下: 如果单词以元音开头(a, e, i, o, u&am…

jQuery学习笔记:事件

一、页面载入1、ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。 简单地说,这个方法纯粹是对向window.load事件注册事件的替代方法。通过使用这个方法&#…

torch.nn.Module()

torch.nn.Module() 如果自己想研究,官方文档 它是所有的神经网络的根父类! 你的神经网络必然要继承! 模块也可以包含其他模块,允许将它们嵌套在树结构中。所以呢,你可以将子模块指定为常规属性。常规定义子模块的方法…

dlib 怎么安装vs2017_win10中的dlib库安装过程

之前试过很多方法结果都失败,最后终于发现一个成功的方法,先记一下以防忘记。参考:记一次Win10环境python3.7安装dlib模块趟过的坑由于我是通过Anaconda安装的Python,所以环境与这位博主的有所不同,所以具体情况需要根…

LeetCode 779. 第K个语法符号(找规律)

1. 题目 在第一行我们写上一个 0。 接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始) 例子: 输入: N 1, K 1 输出: 0输入: N 2, K 1 输出: 0输入: …

ADO.NET、ODP.NET、Linq to SQL、ADO.NET Entity 、NHibernate在Oracle下的性能比较

下面我对Oracle数据库在.NET平台下的主要几种数据访问方式进行测试。 下面是测试表: CREATE TABLE CUSTOMERS ( "CUSTOMER_ID" NUMBER NOT NULL , "FIRST_NAME" VARCHAR2(255 CHAR) NOT NULL , "LAST_NAME" VARCHAR2(255 CHAR) …

LeetCode 第 186 场周赛(1060/3107,前34.1%)

文章目录1. 比赛结果2. 题目1. LeetCode 5392. 分割字符串的最大得分 easy2. LeetCode 5393. 可获得的最大点数 medium3. LeetCode 5394. 对角线遍历 II medium4. LeetCode 5180. 带限制的子序列和 hard1. 比赛结果 做出来了 1、2 题,第3题模拟法,超时&…

torch.nn.embedding()

作者:top_小酱油 链接:https://www.jianshu.com/p/63e7acc5e890 来源:简书 内容:上述是以RNN为基础解析的 torch.nn.Embedding(num_embeddings, embedding_dim, padding_idxNone, max_normNone, norm_type2.0, scale_grad_by_fre…

oracle杀死进程时权限不足_在oracle中创建函数时权限不足

我对oracle有一点了解。我试图创建一个如下所示的函数。在oracle中创建函数时权限不足CREATE OR REPLACE FUNCTION "BOOK"."CONVERT_TO_WORD" (totpayable IN NUMBER) RETURN VARCHARAStotlength NUMBER;num VARCHAR2(14);word VARCHAR2(70);word1 VARCHAR…

哇塞,打开一个页面访问了这么多次数据库??

用SQL Server 事件探查器看了一下,哇塞,每打开一个页面都select了n多次数据库,而且很多都是类似的代码?为啥? (1)、二级嵌套绑定数据源 (2)、二级联动 (3)、……多着呢! 解决方法: 对于数据不大…

torch.nn

torch.nn 与 torch.nn.functional 说起torch.nn,不得不说torch.nn.functional! 这两个库很类似,都涵盖了神经网络的各层操作,只是用法有点不同,比如在损失函数Loss中实现交叉熵! 但是两个库都可以实现神经网络的各层运算。其他包…

ORACLE使用JOB定时备份数据库

Oracle的备份一般都是在操作系统上完成,因此定时备份Oracle的功能一般都是由操作系统功能完成,比如crontab。但是Oracle的PIPE接口使得在Oracle数据库中通过JOB来备份Oracle变得可能。 这篇文章给出一个简单的例子,说明如何在JOB中定期备份数…

mysql 装载dump文件_mysql命令、mysqldump命令找不到解决

1、解决bash: mysql: command not found 的方法[rootDB-02 ~]# mysql -u root-bash: mysql: command not found原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/u…