class 'think\app' not found 是因自动加载失效,主因是opcache未启用(含enable_cli=1)或index.php中autoload路径硬编码;404则因web根目录未设为public/或重写规则缺失。

部署 ThinkPHP 到服务器失败,八成卡在 Class 'think\App' not found 或访问 404,不是框架没传全,而是自动加载没触发、入口没暴露、重写没生效这三处没对齐。
为什么上传后报 Class 'think\App' not found
这不是缺文件,是 PHP 没加载到 vendor/autoload.php。常见原因就两个:opcache 关着,或 index.php 里路径写死了本地绝对路径。
- 用
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/目录必须上传,且不能靠复制本地文件夹——应先在服务器上执行composer install --no-dev(若已上传 vendor,请确认autoload.php文件存在且可读) -
runtime/目录必须存在、可写(chmod -R 755 runtime),但不要上传本地已有的runtime/cache/或runtime/log/——清空再传
为什么去掉 index.php 就 404
ThinkPHP 默认靠 URL 重写把所有请求转发给 public/index.php,服务端没配好规则,就会暴露入口或直接挂掉。
- Apache:确保启用了
mod_rewrite,且虚拟主机配置中是AllowOverride All(不是None),.htaccess才会生效 - Nginx:别套用 Laravel 规则;server 块内加标准 ThinkPHP 重写:
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } } - 务必确认 Web 根目录指向的是
public/,不是项目根目录——很多新手把整个think文件夹扔进/var/www/html,结果.htaccess完全不读
APP_DEBUG 关了之后白屏没日志
关闭调试模式后,ThinkPHP 不显示错误,也不写日志,除非 runtime/log/ 可写。白屏=异常被吞+日志丢弃。
- 先临时把
APP_DEBUG = true放回config/app.php,看真实报错 - 确认
runtime/log/目录存在且属于 Web 用户(如www-data或nginx),权限设为755或775 - 若用宝塔等面板,注意其“防跨站”设置可能限制
runtime/写入,需手动关闭或加白名单
最常被跳过的其实是 opcache.enable_cli=1 和 public/ 作为 Web 根目录这两步——前者导致命令行缓存无效,后者让所有重写规则形同虚设。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











