몇몇 웹 서버(아파치 등)는 콜백 함수를 호출할 때 스크립트의 작업 디렉토리를
바꿉니다. 콜백 함수 안에서
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를 반환합니다.
다음이 콜백 형태입니다:
boolhandler
( string$buffer
[, int$phase
] )
buffer
출력 버퍼의 내용.
phase
PHP_OUTPUT_HANDLER_* 상수의 비트 마스크.
output_callback이 FALSE를 반환하면, 원 입력이
브라우저로 전송됩니다.
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로 설정할 수 있습니다.
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>