thinkphp导入excel前必须先配好上传环境,否则文件根本传不进来;需确认php≥7.4、composer可用、vendor/autoload.php存在,安装phpspreadsheet并赋权runtime/upload目录,用request()->file()获取文件后通过move()安全存储再读取。

ThinkPHP导入Excel前必须先配好上传环境,否则文件根本传不进来,更别说读取数据了。很多新手卡在第一步:上传表单提交后报错“file not found”或直接跳转到空白页,其实问题不在Excel解析,而在上传路径、权限、验证规则这些底层配置没对。
确认PHP与Composer环境可用
打开终端,进入你的ThinkPHP项目根目录(就是有composer.json和think文件的那个文件夹)。
执行php -v,确认PHP版本≥7.4——低于7.4的PHP无法运行phpspreadsheet最新版,会直接报Class not found错误。
执行composer --version,确保能正常输出版本号。如果提示“command not found”,说明Composer没装好或没加入系统PATH,得先重装Composer。
【不要跳过这步】项目根目录下必须存在vendor/autoload.php,这是Composer自动加载的入口,ThinkPHP6依赖它来识别phpspreadsheet类。
安装phpspreadsheet依赖包
在项目根目录下执行:
composer require phpoffice/phpspreadsheet
等待终端显示“Installing phpoffice/phpspreadsheet (v2.2.2)”这类成功提示。安装完成后检查vendor/phpoffice/phpspreadsheet目录是否存在,同时确认composer.json里多了"phpoffice/phpspreadsheet": "^2.2"这一行。
如果遇到Class 'PhpOffice\PhpSpreadsheet\IOFactory' not found,90%是因为没执行composer dump-autoload——补上这条命令再试。
配置上传目录与权限
ThinkPHP默认不开放runtime/upload目录写入权限,你得手动创建并赋权:
在项目根目录下执行:mkdir -p runtime/upload(Windows用md runtime\upload)。
Linux/macOS用户执行:chmod 755 runtime/upload;Windows用户跳过此步,但要确认该目录不是只读属性。
【关键路径】上传后的文件必须存到ThinkPHP能读取的路径,比如runtime/upload/,不能存到public/uploads/后还用file_get_contents()硬读——框架会拦截非runtime下的直接文件访问。
编写上传接口并验证文件类型
在控制器中写一个基础上传方法:
第一步:接收文件对象 → 第二步:校验扩展名是否为xlsx或xls → 第三步:安全移动到runtime/upload目录 → 第四步:返回完整路径供后续读取。
校验不能只靠$_FILES['file']['type'],它极易被伪造。必须用pathinfo($file->getOriginalName(), PATHINFO_EXTENSION)取真实后缀,并严格限定为xlsx或xls。
移动文件必须用$file->move('runtime/upload/'),别用copy()或move_uploaded_file()手动处理临时路径——ThinkPHP的File对象已封装好安全逻辑。
如果$file->move()返回false,立刻用$file->getError()获取具体原因,常见是runtime/upload目录不存在或无写权限。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











