2014-10-31 1 views
0

Этот код выводит результат после каждого цикла в браузер. Работает на моем хосте и локальном хосте.
, но после установки bitdefender total security 2015 на моем компьютере не работает (распечатайте весь текст через 10 секунд сразу) i отключить антивирус и брандмауэр в bitdefender, но не решить.
Как это решить? Демо: http://s2.uploadcloud.net/2.phpПочему Bitdefender предотвращает данные флеша (PHP)?

<!DOCTYPE html> 
    <html> 
     <head> 
      <meta charset="utf-8" /> 

      <script> 
    var es; 

    function startTask() { 
     es = new EventSource('progress.php'); 

     //a message is received 
     es.addEventListener('message', function(e) { 
      var result = JSON.parse(e.data); 

      addLog(result.message);  

      if(e.lastEventId == 'CLOSE') { 
       addLog('Received CLOSE closing'); 
       es.close(); 
       var pBar = document.getElementById('progressor'); 
       pBar.value = pBar.max; //max out the progress bar 
      } 
      else { 
       var pBar = document.getElementById('progressor'); 
       pBar.value = result.progress; 
       var perc = document.getElementById('percentage'); 
       perc.innerHTML = result.progress + "%"; 
       perc.style.width = (Math.floor(pBar.clientWidth * (result.progress/100)) + 15) + 'px'; 
      } 
     }); 

     es.addEventListener('error', function(e) { 
      addLog('Error occurred'); 
      es.close(); 
     }); 
    } 

    function stopTask() { 
     es.close(); 
     addLog('Interrupted'); 
    } 

    function addLog(message) { 
     var r = document.getElementById('results'); 
     r.innerHTML += message + '<br>'; 
     r.scrollTop = r.scrollHeight; 
    } 
      </script> 
     </head> 
     <body> 
       <br /> 
      <input type="button" onclick="startTask();" value="Start Long Task" /> 
      <input type="button" onclick="stopTask();" value="Stop Task" /> 
      <br /> 
      <br /> 

      <p>Results</p> 
      <br /> 
      <div id="results" style="border:1px solid #000; padding:10px; width:300px; height:250px; overflow:auto; background:#eee;"></div> 
      <br /> 

      <progress id='progressor' value="0" max='100' style=""></progress> 
      <span id="percentage" style="text-align:right; display:block; margin-top:5px;">0</span> 
     </body> 
    </html> 

progress.php

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

function send_message($id, $message, $progress) { 
    $d = array('message' => $message , 'progress' => $progress); 
    echo "id: $id" . PHP_EOL; 
    echo "data: " . json_encode($d) . PHP_EOL; 
    echo PHP_EOL; 
    ob_flush(); 
    flush(); 
} 

//LONG RUNNING TASK 
for($i = 1; $i <= 10; $i++) { 
    send_message($i, 'on iteration ' . $i . ' of 10' , $i*10); 
    sleep(1); 
} 

send_message('CLOSE', 'Process complete'); 
+0

Вы уверены, что это BitDefender? Что произойдет, если вы его удалите? Я знаю, что 'flush' не работает большую часть времени. Тот факт, что он очищается (отправляется клиенту), не означает, что он отображается немедленно. На самом деле, ваш URL-адрес дает мне такую ​​же проблему, и у меня нет BitDefender (больше). – GolezTrol

+0

Я уверен, что BitDefender предотвращает печать в режиме реального времени в браузере. после unistall он работает нормально. (после каждого второго результата печати в браузере) – user2511140

+0

Я обновляю демо-код – user2511140

ответ

0

Проблема была в BitDefender. они решили это сейчас.