2013-08-20 44 views
0

所以我有一个php文件,它为一系列id运行sql查询集。该文件可能需要一些时间才能运行。同时访问Session的多个文件

虽然这是运行,我想有一个进度条。

我拥有它,以便正在运行的文件更新一个会话变量,指出每组查询后完成百分比。然后在我的前端,我正在对另一个读取会话变量值并返回它的文件进行ajax调用。然后我用返回的百分比更新进度条填充的宽度。

问题: 只有在所有查询都完成后,进度条才会更新。所以我看到我的进度条在0%的情况下持续了几秒钟,然后突然跳到100%。看来会话被锁定,直到脚本完成。我尝试使用session_write_close(),但无法让它工作。

谢谢。

+1

会话运行时,PHP中的会话文件被锁定。所以从'session_start()'到'session_write_close()'。 [PHP和会话:有什么办法可以禁用PHP会话锁定吗?](http://stackoverflow.com/q/3371474/367456),[PHP session_start()导致HTTP请求挂起](http:///stackoverflow.com/q/2259112/367456)以及关于该主题的许多其他内容。因为它是会议,你需要用它来摆弄它。 – hakre

回答

1

我有类似的问题,会议解决方案无法正常工作。我的解决方案是将当前状态写入临时.txt文件,然后用ajax调用读取该文件。

1

这样做的问题是会话变量不存储在运行时。他们将等到脚本完成之后才将该变量存储在会话中。一种解决方案是将临时进程存储在数据库或文件中,并使用AJAX定期访问数据。

另一种解决方案是使用服务器端JavaScript,如Googles V8 Engine (Node.js)和根据您的进度触发事件。然后,您的页面将根据正在触发的JavaScript事件进行更新。