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的动作。你当前的页面只要通过统计数据库的记录条数,就能得到进度百分比了。