2010-05-06 38 views
0

我一直在试图让下面的代码工作。基于输出缓冲区的进度条

这是一个使用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(); 
} 

?> 

回答

2

你不能您已经将其发送给客户端后, '回退'输出文本。它只是被附加。

0

你不能在PHP中做进度条,你必须写在例如。 JavaScript,只能用PHP回声。 你不能这样做,因为PHP是服务器端语言和任何加载执行上客户端因为服务器没有任何负荷再装填的脚本,你必须在客户端语言。

1

它不会工作,因为你试图混合服务器端和客户端的代码。客户端的PHP代码不起作用。你将需要使用javascript本身来构建整个进度条。

+1

我认为这是可能的使用Flex,但我不是很确定。 – pinaki 2010-05-06 11:30:11

1

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

0

我不认为任何这些答案是完整或正确的,是增加表决。

这是真的,你不能收回输出,但是你可以做什么KPL希望使用甚至不需要JavaScript的一个简单的非Ajax进场做......我做这一切的时候。在ie 9上测试过,firefox,chrome和safari。也许可以肯定的是,在2010年,当这个技术被问及这种技术不起作用时,但我不明白为什么现在。它不是HTML5或任何幻想...

你这样做使用ob_flush就像KPL猜测和你重新输出当前栏html(但你喜欢它看,花哨/动画/等)与位置:绝对和一个递增z-index:$计数器。这样每个循环的输出就会被刷新,因为php在服务器上运行,新的输出整齐地放置在前一个输出的顶部。听起来很乱,但这种技术看起来很完美,并且在我尝试过的每个浏览器上都能很好地工作。