2012-03-15 1 views
3

ob_start가 출력 버퍼링을 작동시키는 것을 알고 있지만 그 의미를 완전히 이해하지 못합니다. 나에게 그것은 스크립트 데이터 출력을 멈추는 것을 의미한다.ob_start 및 ob_gzhandler 함수가 실제로 수행하는 작업

사실인가요? 이 경우 브라우저에서 데이터를 어떻게 출력합니까? 결국 ob_end_flush()를 사용해야합니까?

ob_gzhandler는 웹 페이지를 압축하므로 브라우저는 어떻게 이러한 페이지를 처리합니까?

ob_start ("gzhandler")는 코드에서 보았습니다. ob_gzhandler는 웹 페이지를 압축하고 ob_start ("gzhandler")는 무엇을 의미하며 두 함수 모두에 어떻게 적용됩니까?

모두에게 감사드립니다!

+1

http://php.net/manual/en/book.outcontrol.php –

답변

3

출력 버퍼링이란 출력을 stdout 스트림에 직접 쓰는 대신 버퍼에 쓰는 것을 의미합니다.

그런 다음 스크립트가 완료되면 (또는 ob_end_flush()을 호출 할 때) 해당 버퍼의 내용이 stdout에 기록됩니다.

ob_gzhandler을 사용하면 버퍼 내용이 stdout에 기록되기 전에 변환되어 gzip으로 압축됩니다.

그것은 단지 완충 시스템의 용도 중 하나입니다, 내가 이런 식으로 설명하자,

1

확인 (gzip 압축을 지원하는 브라우저. 내용을 압축 해제, 반대편에이 역)하지만 난 그게 생각 좀 근사해.

먼저이 애니메이션을 살펴 보시기 바랍니다.

Operating System Start

당신은 당신이 쓸 수 있습니다 예를 들어이 같은 수준의 기반 구조를 가지고 PHP 스크립트,이 경우 : 데이터베이스 서버에 설립

연결 .. 선택

데이터베이스 : 데이터 쿼리가 시작

MY_DATABASE

데이터 (찾을 : 200 행) 종료 쿼리

...

등이 있지만 출력 버퍼링과 홍조를 사용하지 않는 경우 스크립트 실행이 모두 종료 될 때, 당신은이 라인을 볼 수 있습니다. 하지만 생각이 "내 스크립트가 어떤 일을하는지보고 싶습니다!"라고 말하면, 먼저 ..해야합니다.

죄송합니다. php.ini 파일에서 implicit_flush를 "on"으로 설정해야합니다. 아파치 서버는이 모든 것을 볼 수 있습니다.

두 번째로, 출력 버퍼링 (약식 "ob")을 "ob_start();"다음에 코드 "echo"문 다음에 "012_solow();"다음에 " " 스크립트는 실시간으로 실행됩니다.

  • 페이지의 시작

    1. 장소위한 ob_start() (또는 캡처 할 내용의 시작) :

      나중에, 그것은 또한 파일을 기반으로 정적 콘텐츠의이 같은 버퍼링에 사용됩니다 페이지 끝 (또는 캡처 할 내용의 끝)에 ob_end_flush()을 배치하십시오.

    2. 다음에 $ my_var = ob_get_contents(); 서버가 생성하여 클라이언트에 보내는 모든 HTML 출력을 my_var 변수로 가져온 다음 원하는대로 사용할 수 있습니다. 주로 파일에 저장되며 파일의 마지막 수정 날짜를 확인하여 정적 버퍼링으로 사용됩니다.

    나는 당신의 마음에 전구를 밝힐 수 있기를 바랍니다.

  • 1

    link을 방문하십시오. 질문에 대한 명확한 개념을 갖기를 바랍니다.

    +0

    을 모두 읽은 것 같습니다. 질문에 답할 수 없습니다. 링크가 작동하지 않으면 대답은 의미가 없습니다. – Eva

    +0

    테스트 용으로 HTTP 압축은 할 수 있습니다 [* 여기 *] (http://www.whatsmyip.org/http-compression-test/?url=aHR0cDovL3d3dy5zY2hlZHVsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcw?) – hyip

    관련 문제