thinkphp6在heroku上需禁用.env文件,改用系统环境变量动态配置数据库:通过heroku config:set设置db_host等变量或解析database_url,修改config/database.php直接读取$_env,并关闭schema缓存、调试模式及确保runtime可写。

ThinkPHP6 在 Heroku 上不能直接读取 .env 文件(Heroku 默认禁用该文件且不支持自动加载),必须改用系统级环境变量 + 手动适配配置逻辑。核心是让 TP6 的数据库配置从 $_ENV 或 getenv() 动态读取,而非依赖本地 .env。
Heroku 环境变量设置方式
Heroku 不提供图形化 .env 编辑界面,所有变量需通过 CLI 或 Dashboard 设置:
- 命令行执行:
heroku config:set DB_HOST=xxx.us-east-1.rds.amazonaws.com DB_PORT=3306 DB_DATABASE=myapp DB_USERNAME=admin DB_PASSWORD=xxx - 若使用 Heroku Postgres 插件,它会自动注入
DATABASE_URL(格式如mysql://user:pass@host:port/dbname),需自行解析 - 确保变量名全大写、无空格、不含特殊字符(TP6 原生支持大写环境变量)
修改 config/database.php 以兼容 Heroku
打开 config/database.php,将默认连接配置改为从环境变量提取,例如:
'connections' => [
'mysql' => [
'type' => 'mysql',
'hostname' => $_ENV['DB_HOST'] ?? '127.0.0.1',
'hostport' => $_ENV['DB_PORT'] ?? '3306',
'database' => $_ENV['DB_DATABASE'] ?? 'thinkphp',
'username' => $_ENV['DB_USERNAME'] ?? 'root',
'password' => $_ENV['DB_PASSWORD'] ?? '',
'charset' => 'utf8mb4',
'prefix' => '',
'deploy' => 0,
'rw_separate' => false,
],
],
注意:不要在配置中调用 env() 函数——Heroku 的 env() 辅助函数在 TP6 中默认未启用,且其底层仍依赖 .env 文件;直接读 $_ENV 更可靠。
处理 DATABASE_URL(推荐用于 Heroku Postgres/MySQL 插件)
如果使用 Heroku 官方数据库插件,DATABASE_URL 是唯一保证存在的变量。可在 config/database.php 开头添加解析逻辑:
if (isset($_ENV['DATABASE_URL'])) {
$url = parse_url($_ENV['DATABASE_URL']);
$dbConfig = [
'hostname' => $url['host'],
'hostport' => $url['port'] ?: '3306',
'database' => ltrim($url['path'], '/'),
'username' => $url['user'],
'password' => $url['pass'],
];
} else {
$dbConfig = [
'hostname' => $_ENV['DB_HOST'] ?? '127.0.0.1',
// ...其余字段
];
}
// 然后在 connections.mysql 中用 $dbConfig['hostname'] 等赋值
部署前关键检查项
- 确认
runtime/目录已设为可写(Heroku 的文件系统是只读的,需用heroku buildpacks:add --index 1 https://github.com/heroku-community/buildpack-nginx或改用opcache+ 内存缓存替代文件缓存) - 禁用 schema 缓存:
'schema_cache_path' => null,,避免因 runtime 不可写导致报错 - 关闭调试模式:
APP_DEBUG=false(通过heroku config:set APP_DEBUG=false),防止敏感信息泄露 - 确保 Composer 自动加载正常:在
composer.json的scripts中加入"post-install-cmd": ["php think optimize:config"],提升运行时性能
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











