需升级php至8.0+、将网站根目录设为public、删除.env并用宝塔配置环境变量、chown -r www:www runtime/、启用thinkphp伪静态规则。

宝塔面板里 PHP 版本和 ThinkPHP 不兼容怎么办
ThinkPHP 6.1+ 要求 PHP ≥ 8.0,而宝塔默认可能装的是 7.4 或 7.3 —— 这不是警告,是直接报 ParseError: syntax error, unexpected token "|",因为联合类型语法不被识别。
实操建议:
- 进宝塔「软件管理」→ 找到当前 PHP 版本 → 点「设置」→「安装扩展」里确认是否勾选了
curl、openssl、mbstring、fileinfo(TP6 必需) - 如果已装低版本 PHP,别硬改配置,直接在宝塔里「安装」一个 PHP 8.1 或 8.2,再在网站设置里切换 PHP 版本
- 切完别忘了重启对应 PHP 服务,否则
phpinfo()显示的还是旧版本
public 目录没设为根目录导致路由 404
本地开发用内置服务器(php think run)或 Apache 的 DocumentRoot 指向 public,但宝塔新建站点时默认把根目录设在项目顶层,结果所有请求都落到 index.php 外面,ThinkPHP 的入口文件根本没执行。
实操建议:
- 宝塔「网站」→ 点你的站点 → 「根目录」右侧点「修改」→ 把路径从
/www/wwwroot/your-site改成/www/wwwroot/your-site/public - 改完立刻测试访问
/index.php?s=/index/index,能出首页说明入口通了;如果还 404,检查是否开启了「伪静态」并选了 ThinkPHP 对应规则 - 别手动改 Nginx 配置里的
root指令——宝塔会覆盖,必须走「根目录」界面操作
数据库配置写死在 .env 里,上线后连不上
本地 .env 文件里写着 DB_HOST=127.0.0.1、DB_PASSWORD=123456,但线上 MySQL 通常不是本地,且密码也不同。更麻烦的是,很多人把 .env 提交进了 Git,线上一拉代码就直接覆盖掉正确配置。
实操建议:
- 上线前删掉项目根目录下的
.env,改用宝塔「网站」→「配置文件」→ 在location /块里加一行:set $env_db_host "192.168.10.100";,然后在config/database.php里用$_SERVER['HTTP_ENV_DB_HOST'] ?? '127.0.0.1'读取(注意开启 Nginx 的env模块或用fastcgi_param透传) - 或者更稳妥:宝塔「网站」→「SSL」→「其他」→「防跨站攻击」关掉,然后在
public/index.php开头插入putenv('DB_HOST=your-online-host');等环境变量 - 务必确认
config/app.php中'app_debug' => false,否则数据库错误会直接打屏,暴露敏感信息
Runtime 缓存目录权限不对,日志写不进去
ThinkPHP 启动时要在 runtime 下建 log、cache、temp 子目录,但宝塔新建站点默认用 www 用户运行 PHP,而上传的文件往往是 root 或你本地用户名创建的,导致 mkdir(): Permission denied。
实操建议:
- 进宝塔终端,cd 到项目根目录,执行:
chown -R www:www runtime/(不是chmod 777,那太危险) - 如果用了宝塔「计划任务」跑定时命令(比如
php think timer:run),要单独给该任务指定运行用户为www,否则它仍以root身份执行,又写不进runtime - 检查
runtime目录是否被 Git 忽略 —— 如果没忽略,线上拉代码时可能清空掉已有缓存文件,导致首次访问慢甚至报错
最常被跳过的其实是伪静态规则和 runtime 所有者切换这两步,其他都能靠报错反推,但这俩静默失败,得主动查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











