我一直试图让以下代码正常工作。
这是一个使用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();
}
?>
答案 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在服务器上运行时输出被刷新,新输出整齐地放在前一个输出的顶部。听起来很乱,但这种技术看起来很完美,并且在我尝试过的每一个浏览器上都非常有效。