2014-11-20 3 views
1

아약스를 통해 호출되는 스크립트가 있습니다. 이 스크립트는 Apache 2.4.7 서버와 PHP 5.5.9에서 실행됩니다.PHP - 강제 연결을 닫을 때 데이터가 전송되지 않습니다.

스크립트는 브라우저에 응답을 보낸 다음 연결을 닫고 더 많은 작업을 계속 실행합니다.

이것은 첫 번째 방법입니다. 작동하지 않습니다.

<?php 
ob_start(); 
echo "some text"; 
$size = ob_get_length(); 
ignore_user_abort(true); 
header("Connection: close\r\n"); 
header("Content-Length: $size"); 
header("Content-Encoding: None", true); 
ob_end_flush();  
flush(); 
ob_end_clean(); 
//after this a few actions follow 
?> 

오류는 :

  • 말림 : 이것은 둘째 순 :: ERR_CONTENT_LENGTH_MISMATCH

(18) 전사 9 바이트

  • 브라우저를 읽어 나머지 폐쇄 방법. 그것은 작동합니다.

    <?php 
    ob_start(); 
    echo "some text"; 
    $data = ob_get_contents(); 
    $size = ob_get_length(); 
    ob_end_clean(); 
    ignore_user_abort(true); 
    header("Connection: close\r\n"); 
    header("Content-Length: $size"); 
    header("Content-Encoding: None", true); 
    echo $data; 
    ob_end_flush();  
    flush(); 
    ob_end_clean(); 
    //after this a few actions follow 
    ?> 
    

    이것은 시행 착오를 거쳐 작성되었으며, 왜 작동하는지 그리고 다른 이유는 알 수 없습니다.

    나는 이것을 이해하는 데 도움이되기를 바랍니다.

    ob_end_flush();  
    flush(); 
    ob_end_clean(); 
    

    ob_end_flush()ob_end_clean() 모두 출력 버퍼링을 종료합니다 : 그것은 문제처럼 보인다

  • 답변

    1

    는 마지막 세 줄 것입니다. php's ob_start() 따르면

    : 내부 버퍼에 저장되는 출력에

    ob_end_flush()를 사용한다. 또는 ob_end_clean()은 자동으로 버퍼 내용을 삭제합니다.

    둘의 조합으로 출력이 지워집니다.

    나는 그것을 변경할 때 작동하는 첫 번째 조각을 얻을 수 있습니다 :

    ob_start(); 
    echo "some text"; 
    $size = ob_get_length(); 
    ignore_user_abort(true); 
    header("Connection: close\r\n"); 
    header("Content-Length: $size"); 
    header("Content-Encoding: None", true); 
    ob_flush(); 
    ob_end_clean(); 
    
    +0

    감사합니다,하지만 불행히도 그것은 나를 위해 작동하지 않았다. 같은 오류. –

    +0

    @MarvinSaldinger, 스크립트를 [gist] (https://gist.github.com/) 또는 [pastebin] (http://pastebin.com/)에 복사하고 링크를 공유 할 수 있습니까? 방금 다른 컴퓨터에서 내 스 니펫을 다시 시도했는데 제대로 작동합니다. – labue

    +0

    나는 그것을 할 수 없다. ob_start() 다음에는 데이터베이스에 액세스하는 일부 포함 된 파일이 있습니다. 다른 에코 또는 그와 비슷한 것은 없습니다. 나머지는 당신이 보는 것입니다. –

    관련 문제