ThinkPHP 作為國產 PHP 框架的佼佼者,以簡單易用、文檔豐富著稱。本文記錄從零開始理解框架目錄、入口文件機制、項目目錄自動生成及生產部署佈局的完整過程。
解壓框架包後,核心目錄佈局如下:
ThinkPHP/ ├── ThinkPHP.php # 框架入口文件(不能直接運行,需被項目入口引用) ├── Common/ # 框架公共函數/常量定義 ├── Conf/ # 框架默認配置(慎改,項目層覆蓋) ├── Extend/ # 框架擴展目錄(類庫、驅動等) ├── Lang/ # 核心語言包 ├── Lib/ # 核心類庫(框架心臟) │ ├── Behavior/ # 核心行為類庫(AOP切面) │ ├── Core/ # 核心基類(Controller, Model, View...) │ ├── Driver/ # 內置驅動 │ │ ├── Cache/ # 緩存驅動 │ │ ├── Db/ # 數據庫驅動 │ │ ├── TagLib/ # 標簽驅動 │ │ └── Template/ # 模板引擎驅動 │ └── Template/ # 內置模板引擎 └── Tpl/ # 系統默認模板
關鍵認知:ThinkPHP.php 是引導文件,而非運行入口。它負責初始化常量、註冊自動加載、啟動應用。
<?php // 最簡單的入口文件(通常命名為 index.php) require '/ThinkPHP框架所在目錄/ThinkPHP.php';
執行此文件將啟動框架,但尚無項目結構。
將入口文件放置於項目根目錄(如 /var/www/app/index.php)並訪問,框架會自動生成標準項目目錄:
app/ # 項目根目錄 ├── index.php # 項目入口文件 ├── Common/ # 項目公共函數/配置 ├── Conf/ # 項目配置 (config.php, db.php...) ├── Lang/ # 項目語言包 ├── Lib/ # 項目類庫 (核心業務代碼) │ ├── Action/ # 控制器類 │ ├── Behavior/ # 行為擴展 │ ├── Model/ # 模型類 │ └── Widget/ # 組件類 ├── Runtime/ # 運行時緩存 (需寫入權限) │ ├── Cache/ # 模板緩存 │ ├── Data/ # 數據緩存 │ ├── Logs/ # 日誌文件 │ └── Temp/ # 臨時緩存 └── Tpl/ # 項目模板
原理:框架檢測 APP_PATH 常量未定義時,以入口文件所在目錄為項目根目錄自動創建上述結構。
為了安全與清晰,建議將入口文件移至項目目錄外層(Web 根目錄),並顯式定義常量:
/var/www/ # Web 服務器文檔根目錄 ├── index.php # 公開入口文件 └── app/ # 項目代碼目錄 (非公開,防止源碼洩露)
<?php
// /var/www/index.php
define('APP_NAME', 'app'); // 項目名稱
define('APP_PATH', './app/'); // 項目目錄相對路徑
require './ThinkPHP框架所在目錄/ThinkPHP.php';
優勢:
APP_PATH。app/ 納入 Git,Runtime/ 加入 .gitignore。| 常量 | 默認值 | 說明 |
|---|---|---|
| THINK_PATH | 框架目錄 | 框架核心路徑 |
| APP_PATH | 入口文件目錄 | 項目應用路徑 |
| APP_NAME | app | 項目名稱 |
| RUNTIME_PATH | APP_PATH/Runtime/ | 運行時緩存路徑 |
| CONF_PATH | APP_PATH/Conf/ | 配置文件路徑 |
| LIB_PATH | APP_PATH/Lib/ | 類庫路徑 |
ThinkPHP 3.1 通過 入口文件引導 + 自動目錄生成 + 常量約定 三大機制,實現了「零配置啟動、約定優於配置」的開發體驗。掌握目錄分層邏輯與入口文件外移部署,是從「能跑通」走向「工程化交付」的關鍵一步。