2010-05-06 3 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

1

Что @Delan говорит: «Вы не можете« вернуть »и отредактировать вывод, который уже был отправлен клиенту. Вам нужно будет вывести совершенно новый фрагмент <script> для каждого движения процентного бара.

0

Я не думаю, что какой-либо из этих ответов является полным или правильным, который был проголосован.

Это правда, что вы не можете отменить вывод, но вы можете делать то, что KPL хочет сделать, используя упрощенный подход без аякса, который даже не требует javascript ... я делаю это все время. протестированы на 9, firefox, chrome и safari. возможно, это может быть правдой, что в 2010 году, когда это было задано, этот метод не сработал, но я не понимаю, почему сейчас. это не html5 или что-то необычное ...

вы делаете это, используя ob_flush, как KPL-догадки, и вы повторно выводите текущий html-бар (однако вам нравится смотреть, причудливый/анимированный/и т. д.) с положением: абсолютным и приращение z-index: $ counter. таким образом, на каждом цикле вывод будет сброшен, поскольку php будет запущен на сервере, а новый вывод будет аккуратно помещен поверх предыдущего вывода. звучит беспорядочно, но эта техника выглядит идеально и работает действительно хорошо в каждом браузере, который я пробовал.

Смежные вопросы