2012-08-30 28 views
2

我有一個漫長的導入過程,我正嘗試使用Symfony 2.1中提供的新的StreamedResponse向用戶報告有關該任務的一些反饋,但響應沒有被流式傳輸(我一次獲取所有內容在處理結束時)。這是我的代碼在我的控制器中:StreamedResponse不起作用

  $em = $this->getDoctrine()->getEntityManager(); 
      $response = new StreamedResponse(); 
      $response->setCallback(function() use ($em) { 
       $file = fopen(sys_get_temp_dir().'/categories.txt', 'r'); 
       $lineNum = 0; 
       while ($line = fgets ($file)) { 
        $category = new Category(); 
        $fields = explode("\t",$line); 
        $category->setFullId($fields[0]); 
        $category->setName($fields[2]); 
        $category->setFullName($fields[4]); 
        $em->persist($category); 
        if ($lineNum%100==0) { 
         echo 'Processing Line: '.$lineNum.'<br>'; 
         flush();        
         $em->flush(); 
        } 
        $lineNum++; 
       } 
       fclose($file); 
      }); 
      return $response;     

任何想法可能是錯誤的?

回答

3

好的,我發現它:您需要同時撥打ob_flush()flush()

+0

太棒了!這是什麼原因?我從來沒有聽說過ob_flush。做得好! – Mick

+1

函數的ob_範圍設置了一個內部緩衝區,以便代碼所做的任何輸出都輸出到此緩衝區。例如,通過Response來捕獲模板等所有輸出,然後將其重定向回瀏覽器。這就是爲什麼你需要在這種情況下調用它 –

+1

+1的ob_flush。非常感謝@Carlos :-) – Mick