thinkphp5目录结构核心在于明确入口、配置、代码和运行时路径:入口为public/index.php,配置在application/下,业务代码放application模块内,runtime需确保web服务器用户可写。

ThinkPHP5 的目录结构不是固定死的,但有默认约定;看目录结构,关键不是数文件夹,而是搞清「入口在哪」「配置在哪」「代码放哪」「运行时写哪」这四点。
入口文件和 Web 可访问路径必须是 public 目录下
所有请求都得经过 public/index.php,它才是真正的入口。这个文件会加载框架、初始化应用,并把请求路由到控制器。别把 index.php 放错位置——比如放在 application 里,直接 500 或空白页。
-
public/是唯一对外暴露的目录,.htaccess(Apache)或nginx.conf的 root 必须指向这里 -
public/static/是推荐的静态资源存放位置,CSS/JS/图片别塞进application里 - 本地快速测试用
php -S localhost:8000 router.php,也得在public目录下执行
application 目录里真正干活的模块和配置都在哪
application 是你写业务逻辑的地方,默认包含多个模块(如 index、admin),每个模块下都有 controller、model、view。但注意:这些模块不是必须的,你可以删掉 admin,只留 index;也可以新增 api 模块。
-
application/config.php是全局配置,app_debug、default_module这类开关在这里设 -
application/database.php专管数据库连接,密码、端口、前缀别硬编码在控制器里 -
application/route.php是路由定义入口,return ['hello' => 'index/hello'];这种映射就写这儿 - 模块级配置(如
application/index/config.php)会自动合并覆盖全局配置,适合多模块差异化设置
runtime 目录权限不对会导致缓存写失败、白屏或报错
runtime 是框架自动生成日志、模板缓存、数据缓存的目录,只要 PHP 进程没权限写入,就会卡在初始化阶段。Linux/macOS 下常见错误是 mkdir(): Permission denied 或 Failed to write cache file。
- 确保
runtime/及其子目录(log、cache、temp)对 Web 服务器用户可写(通常 chmod 755 或 775) - 开发时可以临时设
'app_debug' => true,但上线前必须关掉,否则runtime/log/会疯狂刷调试日志 - 不建议把
runtime提到项目根外,因为APP_PATH常量默认拼接的是相对路径,改了容易断
thinkphp 和 vendor 别动,但要知道它们怎么被加载
thinkphp/ 是框架核心,vendor/ 是 Composer 安装的第三方包(包括框架本身如果用 Composer 安装)。这两处代码你不该修改,但要清楚加载顺序:
-
public/index.php会 require../thinkphp/start.php,再由它加载application下的配置和路由 - 如果你用 Composer 安装 TP5,
thinkphp可能不在项目根,而在vendor/topthink/thinkphp/,此时THINK_PATH常量会自动指向那里 -
extend/是你放自定义类库的地方,命名空间需手动注册(在application/common.php里调用Loader::addNamespace()) - 别在
thinkphp/library/think/下改源码——升级时会被覆盖,要用继承或行为(behavior)扩展
最常被忽略的是模块配置的加载优先级和 runtime 的实际写入路径——很多“配置不生效”问题,其实只是 runtime 权限没开,导致缓存没刷新,旧配置还在跑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











