初識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 <[email protected]> // +---------------------------------------------------------------------- // [ 應用入口文件 ] // 定義應用目錄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 <[email protected]> // +----------------------------------------------------------------------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)