thinkphp项目上线应通过.env文件实现多环境数据库配置,将app_env、db_host等变量置于根目录utf-8无bom的.env中,database.php仅保留通用配置并用env()函数读取变量,部署时需清缓存、禁用.gitignore外提交且确保web服务器禁止访问.env。

ThinkPHP 项目上线时,数据库配置不能靠手动改文件,否则容易出错、漏改、甚至把测试密码提交到 Git。真正安全高效的切换方式,是让框架自动识别环境并加载对应配置。
用 .env 文件控制环境变量
这是 ThinkPHP 官方推荐且最轻量的方式。把 .env 放在项目根目录(和 think 命令同级),内容写成:
APP_ENV=production<br>DB_HOST=rm-xxx.mysql.rds.aliyuncs.com<br>DB_PORT=3306<br>DB_NAME=myapp_prod<br>DB_USER=prod_user<br>DB_PASS=strong_password_here
本地开发时改成:
APP_ENV=development<br>DB_HOST=127.0.0.1<br>DB_NAME=myapp_dev<br>DB_USER=root<br>DB_PASS=
注意三点:
• APP_ENV 大小写敏感,必须全小写;
• .env 不能放在 public/ 或 config/ 下,否则框架读不到;
• 部署时别把 .env 提交进 Git,加到 .gitignore 里。
database.php 只留通用项,环境参数外移
保持 config/database.php 干净,只写不变的骨架:
return [<br> 'type' => 'mysql',<br> 'charset' => 'utf8mb4',<br> 'prefix' => 'tp_',<br> 'debug' => false,<br>];
把易变字段(host、name、user、pass 等)单独拆到环境文件中:
• config/database_development.php
• config/database_production.php
然后在 app/common.php 或入口引导逻辑里加合并代码:
if (is_file(CONF_PATH . 'database_' . APP_ENV . '.php')) {<br> \think\Config::set(include CONF_PATH . 'database_' . APP_ENV . '.php', 'database');<br>}
线上部署时务必检查生效值
配置写对 ≠ 生效。上线后第一件事不是看首页,而是验证数据库配置是否真被加载:
- 在控制器里临时加
dump(\think\Config::get('database'));,确认 host、name、user 是线上值 - 如果报
No database selected,大概率是database字段为空——不是连不上,是没指定库名 - 用
var_dump($_ENV['APP_ENV'])确认环境变量已加载,避免因 .env 路径错或权限问题导致 APP_ENV 为空
宝塔面板部署常见坑点
很多 404 或连接失败其实和数据库无关,而是基础路径没设对:
- 网站根目录必须设为
/www/wwwroot/your-site/public,不是项目根目录 - PHP 版本选 8.1+,并在「PHP 设置 → 安装扩展」里勾上
curl、openssl、mbstring、fileinfo - 伪静态规则选「ThinkPHP」模板,别用 Laravel 或默认通用规则
- runtime 目录要可写(Linux 下
chmod -R 755 runtime),但不要上传本地已生成的缓存文件
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











