update : 2015.11.03
php.shukuma.com

검색:
 
 
출력 버퍼링을 켭니다

ob_start

(PHP 4, PHP 5)

ob_start출력 버퍼링을 켭니다

설명

bool ob_start ([ callable $output_callback = NULL [, int $chunk_size = 0 [, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS ]]] )

출력 버퍼링을 켭니다. 출력 버퍼링을 활성화한 동안, (헤더를 제외한) 스크립트의 모든 출력을 내부 버퍼에 저장하고, 실제로 전송하지 않습니다.

이 내부 버퍼의 내용은 ob_get_contents()를 이용해서 문자열 변수로 복사할 수 있습니다. 내부 버퍼에 들어있는 내용을 출력하려면, ob_end_flush()를 사용하십시오. 또는, ob_end_clean()로 버퍼 내용을 출력하지 않고 지울 수 있습니다.

Warning

몇몇 웹 서버(아파치 등)는 콜백 함수를 호출할 때 스크립트의 작업 디렉토리를 바꿉니다. 콜백 함수 안에서 chdir(dirname($_SERVER['SCRIPT_FILENAME'])) 등을 사용하여 복귀할 수 있습니다.

출력 버퍼는 중첩할 수 있습니다. 즉, ob_start()가 작동 중일 때, 다른 ob_start()를 호출할 수 있습니다. 정확한 횟수의 ob_end_flush()을 호출하면 아무런 문제가 없습니다. 여러 개의 출력 콜백 함수가 작동중이면, 출력은 중첩한 순서대로 필터링됩니다.

인수

output_callback

선택적인 output_callback 함수를 지정할 수 있습니다. 이 함수는 문자열을 인수로 받고, 문자열을 반환해야 합니다. 이 함수는 (ob_flush(), ob_clean() 등의 함수로) 출력 버퍼를 보내거나(전송) 비울 때, 또는 요청 마지막에 출력 버퍼를 브라우저로 보낼 때 호출됩니다. output_callback을 호출 할 때 출력 버퍼의 내용을 인수로 보내고, 브라우저로 전송할 새 출력 버퍼를 결과로 반환하여 작동합니다. output_callback이 호출할 수 있는 함수가 아니라면, 이 함수는 FALSE를 반환합니다. 다음이 콜백 형태입니다:

bool handler ( string $buffer [, int $phase ] )
buffer
출력 버퍼의 내용.
phase
PHP_OUTPUT_HANDLER_* 상수의 비트 마스크.

output_callbackFALSE를 반환하면, 원 입력이 브라우저로 전송됩니다.

output_callback 인수는 NULL 값을 넘겨서 지나갈 수 있습니다.

ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush(), ob_start()는 콜백 함수에서 호출할 수 없습니다. 이 함수들을 콜백 함수에서 호출하면, 그 동작은 정의되어 있지 않습니다. 버퍼 내용을 지우고 싶으면, 콜백 함수에서 ""(빈 문자열)을 반환하면 됩니다. 또한, 출력 버퍼링 함수를 사용하는 print_r($expression, true), highlight_file($filename, true) 등의 함수도 콜백 함수에서 호출할 수 없습니다.

Note:

PHP 4.0.4에서, ob_gzhandler()가 웹 페이지 압축을 지원하는 웹 브라우저에 gz-인코드 데이터를 전송하기 위한 방법으로 생겼습니다. ob_gzhandler()는 브라우저가 허용하는 내용 인코딩 형태를 확인하고 그에 따라 출력합니다.

chunk_size

선택적인 chunk_size 인수가 전달되면, 버퍼 길이가 chunk_size와 같거나 초과하게 되는 출력 호출 후에 버퍼가 전송됩니다. 기본값인 0으로 지정하면, 출력 버퍼가 닫힐 경우에만 출력 함수를 호출합니다.

PHP 5.4.0 이전에는, 1을 특수 값으로 인식하여, chunk 크기를 4096 바이트로 설정하였습니다.

flags

flags 인수는 출력 버퍼에 사용할 수 있는 동작을 제어하는 비트마스크입니다. 기본값은 출력 버퍼를 지울 수 있고, 비울 수 있고, 제거할 수 있는 상태로, PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_FLUSHABLE | PHP_OUTPUT_HANDLER_REMOVABLE, 또는 간단하게 PHP_OUTPUT_HANDLER_STDFLAGS로 설정할 수 있습니다.

각 플래그는 다음 설명과 같이 함수 모음을 제어합니다:

상수 함수들
PHP_OUTPUT_HANDLER_CLEANABLE ob_clean(), ob_end_clean(), ob_get_clean().
PHP_OUTPUT_HANDLER_FLUSHABLE ob_end_flush(), ob_flush(), ob_get_flush().
PHP_OUTPUT_HANDLER_REMOVABLE ob_end_clean(), ob_end_flush(), ob_get_flush().

반환값

성공 시 TRUE를, 실패 시 FALSE를 반환합니다.

변경점

버전 설명
5.4.0 ob_start()의 세번째 인수가 erase로 불리는 boolean 인수(FALSE로 설정할 경우 스크립트가 종료될 때까지 출력 버퍼의 삭제를 방지)에서 flags로 불리는 integer 인수로 변경되었습니다. 불행히도, 이 결과 PHP 5.4.0 이전에 세번째 인수를 사용하던 코드와 API 호환성이 깨졌습니다. 모든 버전에서 호환성을 가지게 하기 위해서는, 플래그 예제를 참고하십시오.
5.4.0 1 chunk 크기는 출력 버퍼에 1 바이트가 전달되게 바뀌었습니다.
4.3.2 output_callback가 실행될 수 없을 때, FALSE를 반환하게 되었습니다.
4.2.0 erase 인수가 추가되었습니다.

예제

Example #1 사용자 정의 콜백 함수 예제

<?php

function callback($buffer)
{
  
// 모든 apples를 oranges로 치환합니다.
  
return (str_replace("apples""oranges"$buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>

<?php

ob_end_flush
();

?>

위 예제의 출력:

<html>
<body>
<p>It's like comparing oranges to oranges.</p>
</body>
</html>

Example #2 PHP 5.3과 5.4에서 호환되는 지울 수 없는 출력 버퍼 생성하기

<?php

if (version_compare(PHP_VERSION'5.4.0''>=')) {
  
ob_start(null0PHP_OUTPUT_HANDLER_STDFLAGS ^
    
PHP_OUTPUT_HANDLER_REMOVABLE);
} else {
  
ob_start(null0false);
}

?>

참고