2013-06-19 3 views
3

다음 코드는 Firefox에서 제대로 실행되지만 Chrome에서는 올바르게 실행되지 않습니다. 나중에 ERR_RESPONSE_HEADERS_TOO_BIG가 표시됩니다. 이 오류는 10000 개가 넘는 항목 (파일)이 포함 된 폴더를 반복 할 때 발생합니다. 긴 작업이어야합니다.크롬에 "ERR_RESPONSE_HEADERS_TOO_BIG"이 표시되는 이유는 무엇입니까?

제발 누구든지이 오류를 방지하는 방법을 설명해 주시겠습니까? ob_end_clean() 후 바로 "echo"하는 경우 오류가 사라집니다. 긴 운영 및 진행 상황을 확인하기위한 다른 요구 중 하나가 병렬 아약스 요청을 차단하기 - 답변 :

를 검색합니다

<?php 

ini_set('max_execution_time', 600); 

function FileItemsCount($it, &$count_ref) 
{ 
    foreach ($it as $file) 
    { 
     $count_ref += 1; 

ob_start(); 
     session_start(); 
     $_SESSION['progress'] = $count_ref; 
     session_write_close(); 
ob_end_clean() ; 

     $is_folder = $it->hasChildren(); 
     if ($is_folder) 
     { 
      FileItemsCount($it->getChildren(), $count_ref); 
     } 
    } 
} 

$dir = "C:/Users/sstefanov/xampp"; 

$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS); 

$count = 0; 
FileItemsCount($it, $count); 


echo $count; 

?> 
+3

내가 너무 많은 데이터가 인쇄되는 경우/서버에서 반향을 발생할 수 있음을 공유하는 것이 유용 할 것이라고 생각 당신이 매번 루프에서 세션을 열고 닫을 때 (그 이유는 어쨌든하고 있습니까?) 그럴 때마다 (?) session_start가 매번 새로운 SetCookie 헤더를 생성 할 수 있기 때문입니다. 따라서 Chrome은 화가납니다. – CBroe

+0

CBroe가 정확합니다. 브라우저에서 허용하는 헤더 수에 크기 제한이 있습니다. 그것은 또한 당신이 만들 수있는 쿠키의 수에 대한 한도를 의미합니다. – DCoder

+0

저는 C++ 프로그래머이고 $ _SESSION [ 'progress'] 변수를 병렬 PHP 프로세스간에 동기화하기 위해 session_start()/session_write_close()를 Enter/Leave critical_section으로 생각합니다. 내가 틀렸을 수도 있지만 PHP에서 다른 방법을 찾을 수 없습니다. – netanalyzer

답변

10

사람들을 위해 일부 necroposting, 나는 비슷한 일을하려고 노력했다. 나는 또한 매번 새로운 가치를 쓰기 위해 세션을 시작하고 바로 그 세션을 중단했다. 또한 크롬에 ERR_RESPONSE_HEADERS_TOO_BIG 오류가 발생했습니다.

이유는 PHP가 Set-Cookie 헤더를 내 경우에 시작하는 것으로 시작했기 때문입니다. 그리고 긴 아약스 요청이 끝나면 서버는 모든 Set-Cookie 헤더를 브라우저에 보냈습니다.

이 문제를 해결하기 위해 출력 전에 header_remove('Set-Cookie');을 호출하여 Set-Cookie 헤더를 제거했습니다.

+1

감사합니다! 내 하루 저장 :) –

0

그것은이 질문의 경우 아니지만, 나는이 오류가도 (디버깅 목적을 위해 예)

관련 문제