출력 제어 함수는 스크립트의 출력 전송을 제어할 수 있도록 합니다. 이는 여러 상황에서, 특히 스크립트가 브라우저로 데이터를 출력한 뒤에 헤더를 전송할 필요가 있을 경우에 유용합니다. 출력 제어 함수는 header()나 setcookie()를 사용하는 헤더 전송에는 영향을 주지 않으며, echo() 등의 함수나 PHP 코드 블럭 사이의 데이터에만 적용됩니다.
이 함수의 작동은 php.ini 설정에 영향을 받습니다.
표 1. 출력 제어 설정 옵션
이름 | 기본값 | 변경가능성 |
---|---|---|
output_buffering | "0" | PHP_INI_PERDIR|PHP_INI_SYSTEM |
output_handler | NULL | PHP_INI_PERDIR|PHP_INI_SYSTEM |
implicit_flush | "0" | PHP_INI_PERDIR|PHP_INI_SYSTEM |
위 설정 지시어에 대한 간단한 설명입니다.
이 지시어를 'On'으로 설정하여 모든 파일에 출력 버퍼링을 활성화 할 수 있습니다. 버퍼의 크기를 제한하려면 이 지시어의 값으로 'On' 대신 최대 바이트 수를 사용하십시오. (예. output_buffering=4096)
스크립트의 모든 출력을 어떤 함수를 통하게 할 수 있습니다. 예를 들면, output_handler를 mb_output_handler()로 설정하면, 문자 인코딩을 지정한 인코딩으로 변경할 수 있습니다. 출력 핸들러 설정은 자동적으로 출력 버퍼링을 켭니다.
참고: mb_output_hadler()와 ob_iconv_handler()를 동시에 사용할 수 없고, ob_gzhandler()와 zlib.output_compression도 동시에 사용할 수 없습니다.
기본값으로 FALSE입니다. TRUE로 변경하면 PHP가 모든 출력 블럭 뒤에 바로 전송하도록 출력 레이어를 설정합니다. 이는 PHP 함수 flush()를 모든 printf(), echo(), HTML 블럭 뒤에 호출하는 것과 동일합니다.
PHP를 웹 환경에서 사용할 때, 이 옵션을 켜는 것은 심각한 성능 저하를 일으킵니다. 일반적으로 디버깅 목적으로만 사용할 것을 권장합니다. CLI SAPI에서는 기본값으로 TRUE입니다.
참고: ob_implicit_flush().
위 예제에서, echo()의 출력은 ob_end_flush()를 호출할 때까지 출력 버퍼에 저장됩니다. 그리하여 setcookie() 호출은 에러를 발생하지 않고 성공적으로 쿠키를 저장합니다. (보통은 브라우저로 데이터를 전송한 뒤에 헤더를 전송할 수 없습니다)
참고: PHP 4.1(과 4.2)에서 4.3으로 업그레이드 할 때 이전 버전의 버그로 인해, php.ini에서 implict_flush가 OFF인지 확인해야만 합니다. 그렇지 않으면 ob_start()는 어떠한 출력도 숨기지 못합니다.
참고: header(), setcookie().