thinkphp部署失败主因是自动加载未触发、入口未暴露、重写未生效;需检查opcache启用(含enable_cli=1)、public/index.php引入路径是否为__dir__ . '/../vendor/autoload.php'、web根目录是否指向public/及重写规则是否配置正确。

ThinkPHP部署失败,八成不是框架问题,而是三处关键没对齐:自动加载没触发、入口没暴露、重写没生效。先别删项目重装,按顺序查这几点,90%能当场解决。
Class 'think\App' not found 怎么办
这不是缺文件,是 PHP 没执行 vendor/autoload.php。核心原因就两个:
- opcache 关着 —— 运行 php -i | grep opcache,确认 opcache.enable 和 opcache.enable_cli 都是 On(CLI 必须开,否则 php think 命令生成的缓存不生效)
- public/index.php 第12行左右的引入路径写死了 —— 必须是 require __DIR__ . '/../vendor/autoload.php';,不能是 /Users/xxx/project/vendor/autoload.php 这类本地绝对路径
- vendor 目录没传全或 autoload.php 不可读 —— 确保 vendor/ 上传完整,且 vendor/autoload.php 文件真实存在、权限为 644
访问直接 404 怎么排查
说明请求根本没进 PHP,框架都没启动。重点检查三件事:
- Web 根目录是否指向 public/ —— 不是项目根目录,也不是 app/ 或 thinkphp/;比如 Nginx 的 root 必须设为 /var/www/myapp/public
- Nginx/Apache 重写规则是否生效 —— Nginx 推荐用 try_files:
location / { try_files $uri $uri/ /index.php?$query_string; }
Apache 要确保 AllowOverride All 开启,且 .htaccess 在 public/ 下 - 测试验证:访问 /index.php?s=/index/index 能打开页面,但 /index/index 报 404 → 就是重写失效
页面空白或报 500 怎么让错误露出来
ThinkPHP 在 APP_DEBUG=false 时会静默吞掉所有致命错误。先让它说话:
- 在 public/index.php 第一行 后立刻加两行:
ini_set('display_errors', '1');
error_reporting(E_ALL); - 临时把 config/app.php 里的 'app_debug' => true 和 'show_error_msg' => true 设为 true
- 检查 runtime/log/ 是否存在、可写,且属主匹配 Web 用户(如 www-data):
chown -R www-data:www-data runtime/
chmod -R 755 runtime/
数据库连不上怎么快速定位
别急着改 config/database.php,先看 PDOException 的 message 字段,它直接告诉你错在哪:
- "2002 Connection refused" → MySQL 服务没启动,或端口不通(用 mysql -h 127.0.0.1 -P 3306 -u root -p 测试)
- "1045 Access denied" → 用户名、密码、host 至少一个不匹配(注意:localhost 默认走 socket,127.0.0.1 才走 TCP)
- .env 配置没生效 → 确保 .env 在项目根目录、APP_DEBUG=true、键名全大写(如 DB_HOST),控制器里 dump(env('DB_HOST')) 输出 null 就说明没加载
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











