基于输出缓冲区的进度条

时间:2010-05-06 11:20:13

标签: php

我一直试图让以下代码正常工作。

这是一个使用ob_get_clean()函数的进度条技巧。

不知道为什么但这个脚本不起作用!

只有初始百分比 - 1%出现,之后没有任何内容。

<?php  
error_reporting(8191);  
function flush_buffers(){  
    @ob_end_flush();  
    @ob_flush();  
    @flush();  
    @ob_start();
} 
$ini    =   2;
echo '<script>document.getElementById(\'lpt\').style.width=\'1%\';</script><br>';  
for($i=1;$i<=100;$i++)  {
            $k=$ini-1;
            $str=str_replace("width=\'$k%\'","width=\'$i%\'",ob_get_clean());           
            $ini++;
            echo $str;
            flush_buffers();
}

?>

5 个答案:

答案 0 :(得分:2)

在将输出文本发送到客户端后,您无法'收回'输出文本。它只是附加。

答案 1 :(得分:1)

当您尝试混合服务器端和客户端端代码时,它将无法工作。客户端的PHP代码不起作用。您需要使用javascript本身构建整个进度条。

答案 2 :(得分:1)

@Delan说:你不能“收回”并编辑已发送给客户端的输出。您必须为百分比条的每次移动输出一个全新的<script>代码段。

答案 3 :(得分:0)

你不能在PHP中做进度条,你必须写在例如。 JavaScript,只与PHP回应。 您不能这样做,因为PHP是服务器端语言,并且任何加载都在客户端上执行,因为服务器不加载任何内容然后加载您必须拥有的脚本客户端语言。

答案 4 :(得分:0)

我不认为这些答案中的任何一个都是完整或正确的。

确实你无法收回输出,但是你可以使用一种甚至不需要javascript的简单的非ajax方法来做KPL想做的事情......我一直这样做。测试了9,firefox,chrome和safari。或许这可能是真的,在2010年被问到这种技术不起作用,但我现在不明白为什么。它不是html5或任何花哨的......

你这样做是使用ob_flush,就像KPL猜测一样,你重新输出当前的条形图html(不管你喜欢它看起来,花哨/动画/等),其位置:绝对值和递增的z-index:$ counter。在每个循环上,当php在服务器上运行时输出被刷新,新输出整齐地放在前一个输出的顶部。听起来很乱,但这种技术看起来很完美,并且在我尝试过的每一个浏览器上都非常有效。