2009-12-12 189 views
1

我有一个PHP脚本,需要大约10分钟才能完成。显示PHP脚本完成百分比

我想给用户一些关于完成百分比的反馈,并且需要关于如何这样做的一些想法。

我的想法是用jQuery和$ .post命令调用php页面。

有没有办法从PHP脚本返回信息而不结束脚本?

例如,从我现在的知识来看,如果我返回变量,PHP脚本将停止运行。

我的想法是将脚本分成多个PHP文件,并在每次从前一个返回给出后运行.post。

但是,这仍然不会给出准确的剩余时间评估,因为每个脚本将是不同的大小。

任何想法的方式来做到这一点?

谢谢!

回答

8

您可以输出echoflush(),但这不是最理想且相当脆弱的解决方案。

对于长时间操作,在后台启动脚本并在共享位置存储/更新脚本状态可能是个好主意。

例如您可以使用fopen('http://…调用,proc_open PHP CLI过程或甚至只是在中打开长时间运行的脚本来启用脚本。

您可以将状态存储在数据库或共享内存中(使用apc_store())。

这会让用户随时检查脚本的状态(通过刷新页面或使用AJAX),并且如果浏览器的连接超时,用户不会失去脚本的跟踪。

它还可以让你避免两次启动相同的长脚本。

+1

谢谢!我没有想到这一点。我可以让它更新数据库,然后有另一个.post命令,它会自动用数据库中的当前百分比更新页面。让我们来看看人们有什么其他想法 – krx 2009-12-12 19:21:13

+0

如果使用fopen()启动一个10分钟的脚本, ,在10分钟之前它不会被杀死吗?只是询问... – MiseryIndex 2009-12-12 23:49:23

+0

长寿命的PHP任务必须执行'set_time_limit(0)'和'ignore_user_abort(true)'以避免被终止,然后无论是由用户还是通过fopen启动(“HTTP:// ...)'。 – Kornel 2009-12-13 02:49:56