某种php刷新

时间:2011-03-13 21:13:43

标签: php cakephp flush

让我先描述一下我先做的事情:

我必须从不同的xml导入大量的数据到我的数据库,因为它持续很多我必须放一个进度条,我这样做:我将整个导入分成很小的AJAX请求,然后导入一次只有少量数据(当ajax请求完成进度条增加一点时)。整个想法很棒,但数据不断变得越来越大,我不能再优化代码了(它已经过优化)。

问题在于,每次我进行AJAX调用时,我都会花费大量时间处理框架特有的内容(模型初始化和内容),浏览器处理URL等等。所以我想知道我是否可以使用php的flush函数。

但我一直在读,刷新功能在所有浏览器上都不起作用(这很奇怪,因为它是服务器端功能)。如果我使用flush函数,我会写<script>increase_progressbar</script>或者我想要的任何东西,我可以做到。

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 实际上传文件(常规上传字段并提交)。当点击按钮时,一些CSS和JS“魔术”隐藏了表单,屏幕上出现了一个不错的加载栏。上传完成后,页面只会刷新,表单会再次显示下一个文件

  2. 使用php-cli开始在后台解析数据,如@Dragon建议使用exec()。

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

    所以这是从用户角度来看的整个过程:

    1. 选择一个文件并上传。
    2. 等到文件上传到服务器上。然后会出现一条消息和加载栏,指示某些内容正在运行。上传表单已被CSS和JS隐藏,因此阻止用户上传另一个文件。
    3. 当它在页面上方被刷新(因为我做了正常的_POST提交)时,表单再次显示在屏幕上以及最近上传的文件列表(我已将其存储在会话中)。
    4. 在该列表的每个节点中,我都有一个指示符(图标)。在第一次它是一个旋转器(ajax纺车)。
    5. 定期(30秒或1分钟)我通过Ajax调用检查文件表并读取解析后的字段。如果后台进程已经结束,则该字段设置为true,并且使用一些JS和CSS我已将图标更改为“完成”。否则旋转器仍然存在。
    6. 在我的项目中,我没有要求显示有关导入的额外细节,但您可以随时使用其他额外数据。

      希望这可以帮助您完成项目。