84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
php 导入excel 前台显示进度条,求指教(不是上传excel文件的进度,而是php 读取excel->处理数据->写到mysql 这个过程的进度条)
走同样的路,发现不同的人生
这个要看你Excel的大小和服务器允许的一次请求的最长时间。我觉得可以分以下几种情况:
Excel很小,一两秒就导入完成了 -- 这种情况下直接显示个假的进度条就差不多了。比如说:第一秒动画进度到50%,第二秒进度到75%,第三名动画进度到90%,然后等服务器返回OK后进度到100%.
Excel比较大,但是能在服务器允许的一次请求的最长时间内完成 -- 这种情况下,也可以有好几种做法:
简单粗暴点,导入Excel的进度自己估算下存放到某个位置(比如数据库某个字段中),另起一个ajax请求或EventSource每隔一段时间(比如500ms)来轮询下进度,并显示动画。
利用HTTP的长连接,在导入Excel的请求中输出进度,记得要及时刷新到浏览器中。而浏览器中根据返回的数据显示进度动画。
Excel非常大或者业务比较复杂,无法在服务器允许的一次请求的最长时间内完成 -- 这时候,如果服务端能跑CLI脚本,则建议跑CLI脚本来导入(进度显示可以参考2.1);否则的话就得对Excel进行分步骤/分时/分段,然后在浏览器中一步一步来执行导入任务,并根据划分的结果来显示进度。
读取excel后能获得记录总条数么?能,那就那么整呗,已处理记录数/总数。不能,那就放弃100%完成进度条,弄个反复循环的进度条表示我还活着就行了。
不知道你会不会用swoole,也就说你上传完excel,之后,获取完记录条数,然后直接用swoole来执行导入sql的动作。你当前的页面只要通过统计数据库的记录条数,就能得到进度百分比了。
这个要看你Excel的大小和服务器允许的一次请求的最长时间。我觉得可以分以下几种情况:
Excel很小,一两秒就导入完成了 -- 这种情况下直接显示个假的进度条就差不多了。比如说:第一秒动画进度到50%,第二秒进度到75%,第三名动画进度到90%,然后等服务器返回OK后进度到100%.
Excel比较大,但是能在服务器允许的一次请求的最长时间内完成 -- 这种情况下,也可以有好几种做法:
简单粗暴点,导入Excel的进度自己估算下存放到某个位置(比如数据库某个字段中),另起一个ajax请求或EventSource每隔一段时间(比如500ms)来轮询下进度,并显示动画。
利用HTTP的长连接,在导入Excel的请求中输出进度,记得要及时刷新到浏览器中。而浏览器中根据返回的数据显示进度动画。
Excel非常大或者业务比较复杂,无法在服务器允许的一次请求的最长时间内完成 -- 这时候,如果服务端能跑CLI脚本,则建议跑CLI脚本来导入(进度显示可以参考2.1);否则的话就得对Excel进行分步骤/分时/分段,然后在浏览器中一步一步来执行导入任务,并根据划分的结果来显示进度。
读取excel后能获得记录总条数么?
能,那就那么整呗,已处理记录数/总数。
不能,那就放弃100%完成进度条,弄个反复循环的进度条表示我还活着就行了。
不知道你会不会用swoole,也就说你上传完excel,之后,获取完记录条数,然后直接用swoole来执行导入sql的动作。你当前的页面只要通过统计数据库的记录条数,就能得到进度百分比了。