2012-08-30 1 views
2

긴 가져 오기 프로세스가 있으며 사용자에게 작업에 대한 피드백을보고하기 위해 새로운 StreamedResponse을 Symfony 2.1에서 사용할 수 있지만 응답이 스트리밍되지 않습니다 (모든 콘텐츠를 한 번에 가져옵니다. 처리의 끝에서). 내 컨트롤러의 코드입니다.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에서 Templating 등의 모든 출력을 catch 한 다음 브라우저로 다시 리디렉션하는 데 사용됩니다. 따라서 ob_flush에 대해서는 –

+1

+1이라고하는 상황에서 호출해야합니다. @Carlos :-) – Mick