代码懒得写了,大概说一下流程吧。
1. 从表单获取上传文件
2. 将文件存储到临时目录并且获取文件地址
3. 通过fopen打开成resource类型,通过fgetcsv从resource中获取单行CSV数据
4. 将读取的CSV数据数组,按照csv文件列读取内容;例如 "[id,名称,性别] => $csv[0];$csv[1];$csv[2];"。
5. 组装自己插入数据库的SQL语句;例如"INSERT INTO data (id, name, sex) VALUES ("$CSV[0]", $csv[1], $CSV[2])";
6. 执行SQL就可以插入了。
下载CSV文件:
1. 在控制器获取要下载数据的条件,生成文件名。
2. 添加响应头:header("Content-Disposition:attachment; filename=$filename");
3. 通过SQL查询总数与分页大小,计算总页大小进行分页条件查询(最好使用自增主键作为条件),防止一次性读爆数据库。
4. 循环读取分页数据,一边读数据,一边写数据。写数据用"echo implode(',', [$data['id'], $data['name'], $data['sex']])"
你可以看一下别人写的代码:
"PHP对CSV文件的读取、写入、下载操作" (https://link.segmentfault.com/?enc=EzQYIfZo3YU1TBbuP6P1gA%3D%3D.ytS9Le0CpStqwRRholDs1FPtep4HKd3uzlJfjuA60AJ6si9fCrUm8CKlrXmlZemounj7qpECGvQHxQefFgmdCw%3D%3D)