初识thinkphp(1)
作为一名准备成为CTF里WEB狗的萌新,在做了3个月的CTF的web题后,发现自己php代码审计非常不过关,并且web的架构模式条理也十分的不清晰,于是抱着提高代码审计能力的态度在近期会去写一个简单的cms(其实现在怎么写思路还是不清晰)
环境搭建:vmware虚拟环境,win7系统,web采用快捷方便的phpstudy(包含php很多版本,apache,mysql)
thinkphp,在中文官网中将压缩文件下载下来,解压到phpstudy/PHPTutorial/WWW/tp新建目录下
开启phpstudy的apache服务器。
在本机中(整个网站架构我是放在虚拟机中的)url输入:虚拟机ip/tp/public/index.php
写这篇文章的时候,这里主页面的index我已经改过了,原版的界面应该是一个 :)这样的一个欢迎界面
所以所访问thinkphp5这个架构的入口即在public/index.php这个文件中,看看文件里面的内容
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +---------------------------------------------------------------------- // [ 应用入口文件 ] // 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
这里的代码明显不是本体内容,它下一步调用了tp/thinkphp/start.php
我们接下来查看该文件内容
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +---------------------------------------------------------------------- namespace think; // ThinkPHP 引导文件
// 1. 加载基础文件
require __DIR__ . '/base.php'; // 2. 执行应用
App::run()->send();
这个文件里面还不是目的代码,他是走的同级目录下的base.php这个文件(5.1版本中没有start.php这个中转文件,直接是index.php跳转于base.php)
base.php这个文件内容我目前没看懂,它作用是会重定向到tp/application/index/controller/Index.php中,而这个文件就是在网页上访问显示的文件,最先给的demo里面就是个php代码里面输出个html页面。(这里我进行了修改,但内容无非是一个内,可以进行继承,并且能调用命名空间)
<?php
namespace app\index\controller; use think\Controller;
use think\Db; class Index extends Controller
{
public function index()
{
$data = Db::name('data')->find();
$this->assign('result', $data);
return $this->fetch();
}
}
而thinkphp这个架构是使用是mvc架构,意思是模型,视图,控制器是三个独立分开的,我在index.php文件中继承了Controller类这个类中的assign函数和fetch函数能够使值传到V(视图)模块中,上面的index.php是C(控制器)模块,而我们真真输出的是在V(视图)文件中,这个文件夹是我手动创建的。
就一个简单的html文件。
这里插播一下,我们回来看public这个目录下
那个static文件夹是做什么的?这里在官方手册中解释是放js,css这些前端的格式样式的,而且这些可以放在其他地方,但是最好放在这里(官方说)
最后就是调用数据库里面的信息了,其实上面的tp/application/index/controller/Index.php中的代码意思就是调用了数据库中的文件。
这里我用phpmyadmin管理系统在浏览器中添加了demo这个数据库,并创建了think_php这个表,里面添加了3个元素。
说下我最先,觉得这个数据库文件必须放在tp这个目录下什么位置(因为最先在phpstduy中phpmyadmin和mysql的目录并不是在tp这个文件目录下的),但是我发现,只要是在web服务器上的数据库里面,thinkphp就能访问到,但是访问前要设置下database.php这个文件
然后设置账号和密码,这里phpstudy安装后mysql的默认账号和密码是root,然后设置数据库名称,和表名前缀(表名前缀可以不设置,就是在index.php中调用时要补全名)
至此再访问public/index.php就返回的数据库里面的信息了(前提是application/index/controller/index.php中写了调用的,并且view中的html文件也进行了相应参数的输出)
初识thinkphp(1)的更多相关文章
- 初识thinkphp(3)
这篇内容主要涉及请求相应内容. 该系列主要是个人笔记,且内容是连贯的,其中涉及到的自己写的模块或者方法在前面文章中有介绍咋来的,如果您看得云里雾里,给您带来不便,真的不好意思. 0x01:请求对象 官 ...
- 初识thinkphp(5)
这次主要内容是模型的基本操作 0x01:什么是模型 通过手册的阅览,笼统的说就是,把打开数据库等操作在另一个php文件中进行 以及对变量的规则具体细节,查询,取值等操作进行定义,方便在控制器中直接使用 ...
- 初识thinkphp(4)
这次内容是数据库的使用方法 因为在第一章讲过就是拿index这个文件写的数据库的访问,这次实验我使用文件是系统默认的首页 配置的内容也在那里有提过就不重发戳图了. 数据库按照手册上的建议建了3行的内容 ...
- 初识thinkphp(2)
thinkphp的url路径的表示格式为 http://ip/tp/public/index.php/模块/控制器/操作 这里url最后的操作就是类里面的函数. 0x01:url访问格式 官方文档中有 ...
- ThinkPHP学习笔记(一)----初识ThinkPHP
在做微信开发的时候原本使用来yii框架,后续觉得yii虽然功能强大使用方便,但是整个框架太大了,不适合一些轻量级的开发:这个时候发现thinkphp这个框架,框架本身很小,只有几M,但麻雀虽小,但五脏 ...
- 使用ThinkPHP框架高速开发站点(多图)
使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...
- 使用ThinkPHP框架高速发展网站(多图)
使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...
- ThinkPHP Widget模块开发流程
初识ThinkPHP的Widget,现把模块开发的流程发布如下,也方便以后自己查阅: 一.新建数据库表self_modules,sql代码如下 CREATE TABLE `self_modules` ...
- [转]使用ThinkPHP框架快速开发网站(多图)
本文转自:http://blog.csdn.net/ruby97/article/details/7574851 这一周一直忙于做实验室的网站,基本功能算是完成了.比较有收获的是大概了解了ThinkP ...
随机推荐
- 使用Sql语句快速将数据表转换成实体类
开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare ...
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
- scala 基础知识总结
在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...
- Ubuntu django+nginx 搭建python web服务器文件日志
uwsgi 配置文件 [uwsgi] http-socket = 127.0.0.1:8080 # 项目目录 chdir=/home/ubuntu/mkweb # 指定项目的application m ...
- shiro登录成功之后跳转原路径
通过 WebUtils.getSavedRequest(request) 来获取shiro保存在session登录之前的url 1:java Controller代码 @PostMapping(&qu ...
- not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AV ...
- Apache的对象复制详解
BeanUtils.copyProperties 和 PropertyUtils.copyProperties 两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标 ...
- Python 入门基础9 --函数基础2 实参与形参
今日内容: 一.函数参数 1.形参与实参定义 2.实参分类 3.形参分类 4.可变参数的整体使用 一.形参与实参定义 def fn(参数们): pass 1.1 形参 定义函数,在括号内声明的变量名, ...
- list(列表)操作【五】
L表示从左边(头部)开始插与弹出,R表示从右边(尾部)开始插与弹出. 一.概述: 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(l ...
- 001_chrome工具详解
一.chrome https://segmentfault.com/a/1190000000683599