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;
任何想法可能是錯誤的?
太棒了!這是什麼原因?我從來沒有聽說過ob_flush。做得好! – Mick
函數的ob_範圍設置了一個內部緩衝區,以便代碼所做的任何輸出都輸出到此緩衝區。例如,通過Response來捕獲模板等所有輸出,然後將其重定向回瀏覽器。這就是爲什麼你需要在這種情況下調用它 –
+1的ob_flush。非常感謝@Carlos :-) – Mick