某种php刷新

某种php刷新,php,cakephp,flush,Php,Cakephp,Flush,让我先描述一下我做的ar: 我必须将大量数据从不同的xml导入到我的数据库中,因为它持续了很多时间,所以我必须放置一个进度条,我这样做:我将整个导入拆分为一个小小的AJAX请求,一次导入少量数据(当AJAX请求完成时,进度条会增加一点)。这个想法很好,但是数据越来越大,我不能再优化代码了(它已经优化了) 问题是,每次我调用AJAX时,我都会浪费很多时间处理特定于框架的事情(模型初始化等),浏览器处理url等等。所以我想知道是否可以使用php中的flush函数 但我一直在读到flush函数并不是在

让我先描述一下我做的ar:

我必须将大量数据从不同的xml导入到我的数据库中,因为它持续了很多时间,所以我必须放置一个进度条,我这样做:我将整个导入拆分为一个小小的AJAX请求,一次导入少量数据(当AJAX请求完成时,进度条会增加一点)。这个想法很好,但是数据越来越大,我不能再优化代码了(它已经优化了)

问题是,每次我调用AJAX时,我都会浪费很多时间处理特定于框架的事情(模型初始化等),浏览器处理url等等。所以我想知道是否可以使用php中的flush函数

但我一直在读到flush函数并不是在所有浏览器上都能很好地工作(这很奇怪,因为它是一个服务器端函数)。如果我使用flush函数,我只需编写
增加进度条
或任何我想要的东西,我就可以做到


那么,对flush函数有什么意见吗?我一直在小脚本上测试它,但我想知道是否有人真的在大脚本上使用它。此外,我可以听取任何其他关于做我想做的事情的建议:)

我不会直接给你建议,但我会告诉你我是如何在我的一个项目中做到这一点的。在我的情况下,我需要上传一个Excel文件,然后解析它们。数据超过3000行,我必须检查每行的所有列中的一些数据。当我在上传后直接解析它时,解析器经常在某个地方崩溃,这真的不安全

我是怎么做到的?上载过程分为两部分:

  • 物理上载文件(常规上载字段和提交)。当按钮被点击时,一些CSS和JS“魔法”隐藏了表单,一个漂亮的加载条出现在屏幕上。上传完成后,页面将刷新,下一个文件的表单将再次出现

  • 使用php cli@Dragon suggest with exec()在后台开始解析数据

  • 在数据库中,我有一个存储文件信息的表,还有一个名为“parsed”的布尔字段。当解析器完成任务时,最后一项任务是将该字段更新为true

    从用户的角度来看,整个过程如下:

  • 选择一个文件并上传它
  • 等待文件上载到服务器上。在此之前,会出现一条消息和加载条,表明某些东西正在工作。上传表单已被CSS和JS隐藏,因此阻止用户上传另一个文件
  • 当页面刷新后(因为我正常提交后),表单会再次出现在屏幕上,并显示最近上传的文件列表(我已将其存储在会话中)
  • 在该列表的每个节点中,我都有一个指示器(一个图标)。第一次它是一个旋转器(ajax旋转轮)
  • 我定期(30秒或1分钟)通过Ajax调用和读取解析字段检查文件表。如果后台进程已经结束,该字段将设置为true,并且使用一些JS和CSS,我将图标更改为“Done”。否则,旋转器将保留
  • 在我的项目中,我不需要显示有关导入的额外详细信息,但您可以随时使用其他额外数据


    希望这对您的项目有所帮助。

    为什么不在后台导入整个项目?在后台导入是什么意思?必须按需发送。将请求发送到一个新文件exec(),然后告诉用户它正在工作,完成后他们将收到一封电子邮件,或者您可以检查数据库变量,并在屏幕上完成后让他们知道,如果您愿意,您可以进行“导入”使用ajax每秒检查页面是否完成很抱歉,但这不是一个真正的解决方案,因为导入也有一个可见的日志,我不应该使用诸如“exec”之类的函数,因为这些函数可能会阻塞服务器。一个exec与多个ajax调用相比,您的版本使用的资源要多得多感谢您的想法,但这很奇怪。。我有大约150万条记录,持续大约3个小时,所以…我不是说它很简单,但这样你可以在后台运行处理,而不用麻烦用户等到它完全导入。因此,一旦上传,他可以随时返回并检查状态。我的范围实际上是mych smoller,但我认为逻辑是一样的