'flush'에 해당되는 글 1건

출력 버퍼링 출력물이 php에 파싱되어 echo print에 의해 브라우저로 출력되는 방법이 일반적인, 필요에 의해 출력 결과물을 바로 브라우저로 보내지 않고, 내용물을 잠깐 동안 버퍼에 보관해 두었다가 출력이 필요할 곳 이를 사용할 수 있습니다.

이를 사용하기 위애서는 ob_start()함수를 호출하고, ob_end_flush로 버퍼링을 비워주면 되는데, 여기서 비운다는 의미는 버퍼에 저장되어 있는 내용을 브라우저로 출력하고, 버퍼를 비운다는 뜻입니다.

예제 (ex #1
 <?php
 
// 출력 버퍼링을 켭니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 버퍼의 내용을 브라우저로 출력하고, 버퍼링을 비워 줍니다.
 // 그리고 출력 버퍼를 종료합니다.
 
ob_end_flush
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }

 
// 결과: php 하보니입니다.
 
?>

출력물을 비우기 전에 변수에 저장하고자 할때는 ob_get_contents를 사용합니다.

예제 (ex #2
 <?php
 
// 출력 버퍼링을 켭니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 변수에 저장합니다.
 
$data ob_get_contents
();

 
// 버퍼의 내용을 브라우저로 출력하고, 버퍼링을 비워 줍니다.
 // 그리고 출력버퍼를 종료합니다.
 
ob_end_flush
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }
 echo 
$data
;
 
// 결과: php 하보니입니다.php 하보니입니다.
 
?>

여기서 출력물을 ob_get_contents로 변수에 저장하고, 버퍼의 내용을 브라우저로 출력하지 않고, 그대로 비우길 원한다면, ob_end_clean를 사용하면 됩니다.

예제 (ex #3
 <?php
 
// 출력 버퍼링을 초기화 합니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 변수에 저장합니다.
 
$data ob_get_contents
();

 
// 버퍼의 내용을 브라우저로 출력하지 않고, 그대로 버퍼링을 비웁니다.
 // 그리고 출력버퍼를 종료합니다.
 
ob_end_clean
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }
 echo 
$data
// 결과: php 하보니입니다.
 
?>

다음과 같이 사용해도 동일합니다.

예제 (ex #4
 <?php
 
// 출력 버퍼링을 초기화 합니다.
 
ob_start
();

 
// 출력 결과물을 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 변수에 저장하고,
 // 출력 버퍼를 비워 줍니다. 그러나 출력 버퍼는 종료하지 않습니다.
 
$data ob_get_clean
();

 
// 출력 결과물을 다시 호출합니다.
 
test
();

 
// 출력 버퍼에 저장되어 있는 내용을 다시 변수에 저장하고,
 // 출력 버퍼를 비워 줍니다. 그리고 버퍼를 종료합니다.
 
$data .= ob_get_clean
();

 
// 내용물을 출력하지 않고, 출력 버퍼를 비우고 종료합니다.
 
ob_end_clean
();

 function 
test
(){
      echo 
"php 하보니입니다."
;
 }
 echo 
$data
// 결과: php 하보니입니다.php 하보니입니다.
 
?>

다음 표의 함수 설명을 참조하면 도움이 되리라 봅니다.

 // 출력물을 브라우저로 출력하고, 버퍼를 비우고, 종료합니다.
 
ob_end_flush
();

 
// 출력 버퍼를 브라우저로 출력하고, 버퍼를 비웁니다.
 
ob_flush
();

 
// 출력물을 변수에 저장하고, 브라우저로 출력하고,
 // 출력 버퍼를 비우고 종료합니다.
 
ob_get_flush
();




 
// 출력없이 버퍼를 비우고, 종료합니다.
 
ob_end_clean
();

 
// 출력없이 버퍼만 비우고, 종료하지는 않습니다.
 
ob_clean
();

 
// 출력물을 변수에 저장하고, 버퍼를 비우고, 버퍼를 종료합니다.
 
ob_get_clean
();




 
// 출력물을 변수에 저장만 합니다.
 
ob_get_contents();

flush 함수는 출력물을 브라우저로 보내고, 출력 버퍼를 비우는 역할을 하지만, 서버나 클라이언트에 영향을 주지 않습니다.

그래서 ob_flushflush를 모두 호출해야 되는데, 몇몇 브라우저는 버퍼를 비우지 않고, 버퍼를 가지고 지속하는 경우가 있는데, 익스플로러 브라우저의 몇몇 버전은 256바이트를 출력받았을 때만 브라우저로 출력하기 때문에 여분의 공백 256바이트와 함께 실제적인 출력물을 전송하면 됩니다.

넷스케이프는 태그가 종료되거나 태그가 시작할 때까지 버퍼에 담아두는 경우도 있으니 참고하여야 합니다.

예제 (ex #5
 <?php
 
// 출력 버퍼를 호출하고,
 
ob_start
();

 
// 브라우저로 출력하고, 출력물을 비웁니다.
 
ob_flush
();
 
flush
();

 
// 실제적인 출력물을 비워 줍니다.
 
for($i=0;$i<1000;$i
++){
      echo 
str_repeat("\n"256
);
      echo 
'printing...<br />'
;
      
ob_flush
();
      
flush
();

      
ob_clean
();
      
usleep(300000
);
 }

 
// 출력 버퍼를 종료합니다.
 
ob_end_clean
();
 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

Tag

댓글을 달아 주세요