ThinkPHP 單一入口模式下,index.php 是整個應用的啟動器,負責定義核心路徑常量、載入框架核心、啟動應用。正確配置關係到部署靈活性與安全性。
| 常量 | 預設值 | 作用 | 最佳實踐 |
|---|---|---|---|
THINK_PATH | ./ThinkPHP/ | 框架核心目錄絕對/相對路徑 | 使用 dirname(__DIR__).'/vendor/thinkphp' 絕對路徑 |
APP_PATH | ./App/ | 應用模組目錄(含 Home/Admin 等) | 項目根目錄下 application/ 或 app/ |
APP_NAME | 'Home' | 預設模組名稱 | 多模組專案明確指定,單模組可省略 |
APP_DEBUG | false | 調試模式開關 | 開發 true,生產 嚴禁 true |
BIND_MODULE | 無 | 綁定單一模組(多入口模式) | API 入口綁定 Api,後台綁定 Admin |
<?php
// +----------------------------------------------------------------------
// | ThinkPHP 入口文件
// +----------------------------------------------------------------------
// 1. 定義應用目錄(相對於入口文件位置)
define('APP_PATH', __DIR__ . '/../application/');
// 2. 開發環境啟用調試(生產環境務必註釋或設為 false)
// 可通過環境變量控制:getenv('APP_DEBUG') ?: false
define('APP_DEBUG', true);
// 3. 綁定模組(可選,單模組專案無需設定)
// define('BIND_MODULE', 'Home');
// 4. 載入框架引導文件
require __DIR__ . '/../thinkphp/start.php';
// 5. 執行應用(ThinkPHP 5/6 風格)
// ThinkPHP 3.x 為:require THINK_PATH.'ThinkPHP.php'; App::run();
開啟 APP_DEBUG = true 後:
SHOW COLUMNS生產環境風險:洩露資料庫結構、絕對路徑、SQL 語句、堆疊追蹤等敏感信息,嚴禁開啟。
project/
├── public/ # Web 根目錄
│ ├── index.php # 前台入口
│ ├── admin.php # 後台入口
│ └── api.php # API 入口
├── application/
│ ├── index/ # 前台模組
│ ├── admin/ # 後台模組
│ └── api/ # API 模組
├── thinkphp/ # 框架核心
└── extend/ # 擴充套件
// admin.php 範例
define('APP_PATH', __DIR__ . '/../application/');
define('BIND_MODULE', 'Admin');
define('APP_DEBUG', false);
require __DIR__ . '/../thinkphp/start.php';
require,無業務邏輯THINK_PATH 指向非 Web 可訪問目錄autoindex.env 或系統環境變量THINK_PATH . 'Tpl/dispatch_jump.tpl' 覆蓋預設跳轉頁| 現象 | 可能原因 | 解決 |
|---|---|---|
| Class 'Think\App' not found | THINK_PATH 路徑錯誤 | 檢查相對/絕對路徑、目錄結構 |
| 模組不存在 | APP_PATH 或 BIND_MODULE 錯誤 | 確認 application/ 下模組目錄命名 |
| 模板找不到 | 大小寫不匹配(開啟調試模式) | 統一控制器/方法/模板小寫命名 |
| 配置不生效 | 生產環境緩存未清理 | 刪除 Runtime/Cache/ 或部署腳本清理 |
入口文件雖小,卻是整個應用的「基因密碼」。掌握常量含義、調試模式副作用、多入口架構,能讓 ThinkPHP 專案在開發、測試、生產環境間平滑流轉,避免 90% 的部署坑。