ThinkPHP部署失败主因是环境与配置未对齐:1.CLI与Web环境PHP版本及php.ini不一致;2..env文件含BOM头或位置错误;3.runtime目录权限不足或SELinux拦截;4.Nginx未透传PATH_INFO导致路由404。

ThinkPHP部署不是“丢上去就能跑”,很多报错表面是代码问题,实际是环境或配置没对齐。真正卡住新手的,往往是那些不报错、只静默失败的细节。
CLI和Web环境必须严格一致
这是90%本地调试失败的根源:终端里php -v显示8.1,浏览器打开phpinfo()却还是7.4;composer create-project成功了,但访问首页直接500——根本原因是CLI和Web用了两套php.ini。
- 在命令行执行
php -i | grep "Loaded Configuration File"(Windows用php -i | findstr "Loaded Configuration File"),确认CLI加载的是哪个ini文件 - 打开该php.ini,检查
extension=openssl、extension=pdo_mysql、extension=mbstring是否已启用(Windows注意写.dll后缀,Linux不要) - 如果用XAMPP/WAMP/PHPStudy,必须进控制面板单独设置“CLI PHP版本”,不能只改Apache/Nginx模块
.env文件必须无BOM且放对位置
数据库配置写得再准,只要.env带BOM头或放错目录,ThinkPHP就当它不存在——而且不提示、不报错,只会连默认的127.0.0.1:3306。
-
.env必须放在项目根目录(和think可执行文件同级),不是app/下,也不是public/里 - 用VS Code或Notepad++打开,右下角编码选“UTF-8 without BOM”再保存;别用Windows记事本直接编辑
- Linux/macOS下可用
file .env检测,输出含“with BOM”就得重存;Windows可用certutil -hashfile .env MD5,开头是EF BB BF即为BOM
runtime目录权限与SELinux限制
一上传就500?常见原因不是代码错,而是runtime目录不可写。尤其在宝塔、CentOS等生产环境,光设777还不够。
- 确保
runtime及其子目录所有者是PHP运行用户(如www或www-data),命令:chown -R www:www runtime - 宝塔环境下,执行
chmod -R 755 public+chmod -R 777 runtime后仍报错,大概率是SELinux拦截,补一句:restorecon -Rv /www/wwwroot/your_project - 生产环境不建议长期用777,可精确赋权:
chmod -R 755 runtime+chmod -R 775 runtime/log runtime/cache runtime/session
Nginx配置要透传PATH_INFO
路由全404、index.php必须手动加才能访问?这不是框架问题,是Web服务器没把路径信息正确交给PHP。
- 宝塔用户:站点设置 → 伪静态 → 选择“ThinkPHP 6”,别手写规则;若自定义,请确认包含
fastcgi_param PATH_INFO $fastcgi_path_info; - 手动配置Nginx时,location块内必须有
try_files $uri $uri/ /index.php$uri;或等效写法,否则PATH_INFO为空,路由解析失败 - Apache用户检查
.htaccess是否生效,AllowOverride All是否开启,mod_rewrite是否启用
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











