PHP4.0은 출력 버퍼링 기능 모음을 제공합니다. 출력 버퍼링 지원을 통해 압축된 버퍼 주위에 함수를 래핑하는 함수를 작성할 수 있습니다. PHP4의 출력 버퍼링 지원을 통해 HTML 본문 출력 여부에 관계없이 HTML 헤더 정보를 저장할 수 있습니다. 하지만 PHP에서는 헤더 정보((header(), 콘텐츠 유형, 쿠키)가 버퍼링되지 않습니다.
PHP를 사용하는 과정에서 헤더와 헤더의 사용은 불가피합니다.
setcookie 두 가지 함수, 이 두 함수는 파일 헤더 정보를 브라우저에 전송하지만, 이 두 함수를 사용하기 전에 출력(공백, 캐리지 리턴, 줄 바꿈과 같은 빈 출력 포함)이 있는 경우 오류가 발생합니다. 프롬프트가 표시되면 프롬프트 정보는 다음과 같습니다: "헤더에 보낼 준비가 모두 완료되었습니다."! . PHP 4.0에는 버퍼 제어를 위한 여러 기능이 추가되었습니다. 이러한 기능을 사용하면 많은 문제를 해결하는 데 도움이 될 수 있습니다.
기능 이름 기능 형식 기능 설명
Flush Flush()는 버퍼의 내용을 출력하고 버퍼를 삭제합니다. 이 기능은 자주 사용되며 매우 효율적입니다.
ob_start void ob_start(void) 출력 버퍼를 엽니다. 버퍼가 활성화되면 PHP 프로그램의 파일 헤더 정보가 아닌 모든 정보는 전송되지 않고 내부 버퍼에 저장됩니다. 버퍼의 내용을 출력하려면 ob_end_flush()를 사용하거나 ob_end_clean()을 사용하여 버퍼의 내용을 출력할 수 있습니다.
ob_get_contents string ob_get_contents(void) 내부 버퍼의 내용을 반환합니다. 이 함수는 현재 버퍼의 내용을 반환하거나, 출력 버퍼가 활성화되지 않은 경우 FALSE를 반환합니다.
ob_get_length int ob_get_length(void) 내부 버퍼의 길이를 반환합니다. 이 함수는 출력 버퍼가 활성화되지 않은 경우 ob_get_contents와 같이 현재 버퍼의 길이를 반환합니다. 거짓을 반환합니다.
ob_end_flush void ob_end_flush(void) 내부 버퍼의 내용을 브라우저로 보내고 출력 버퍼를 닫습니다. 이 함수는 출력 버퍼(있는 경우)의 내용을 보냅니다.
ob_end_clean void ob_end_clean(void) 내부 버퍼의 내용을 삭제하고 내부 버퍼를 닫습니다. 이 함수는 내부 버퍼의 내용을 출력하지 않습니다!
ob_implicit_flush void ob_implicit_flush ([int flag]) Perl을 사용해본 사람이라면 누구나 $|=x의 의미를 알 것입니다. 이 문자열은 버퍼를 열고 닫을 수 있으며, ob_implicit_flush 함수도 이와 같습니다. 기본값은 버퍼 영역을 닫고 절대 출력을 켜는 것입니다.
2. 분석 예:
1. 파일 헤더에 정보를 보낼 때 오류가 발생하지 않도록 버퍼 제어 기능을 사용하십시오.
<? //PHP 프롬프트
ob_start(); //버퍼를 엽니다.
echo "환영합니다 /n"; //출력
header("location:next.php"); //브라우저를 next.php로 리디렉션
?>
ob_start가 제거되면 PHP는 파일의 4번째 줄에 오류 메시지를 표시하고 "Header had all Ready send by"라는 오류 메시지를 표시합니다. 그러나 ob_start를 추가하면 오류 메시지가 표시되지 않습니다. 버퍼가 열리면 에코 이후의 오류 문자는 브라우저에 출력되지 않지만 서버의 버퍼에 남아 있으므로 플러시 또는 ob_end_flush를 사용할 때까지 출력되지 않으므로 파일 헤더에 오류가 없습니다. 출력되었습니다!
2. 출력을 저장합니다(이는 매우 일반적인 사용 방법입니다).
함수의 출력 결과 등 클라이언트의 화면 출력 정보를 알고 싶다고 가정해 보겠습니다. 이 출력 정보는 클라이언트에 따라 다릅니다. <?phpinfo() ?> 함수를 사용하여 서버의 설정 정보를 얻을 수 있지만, phpinfo() 함수의 출력을 저장하려면 어떻게 해야 할까요? 버퍼 컨트롤이 없었기 전에는 전혀 방법이 없었다고 할 수 있지만, 버퍼 컨트롤을 이용하면 쉽게 해결할 수 있습니다.
<?
ob_start(); //버퍼를 엽니다.
phpinfo(); //phpinfo 함수를 사용합니다.
$info=ob_get_contents(); //버퍼의 내용을 가져와 $info에 할당
$file=fopen('phpinfo.txt','w'); //phpinfo.txt 파일 열기
fwrite($file,$info); //phpinfo.txt에 정보 쓰기
fclose($file); //phpinfo.txt 파일을 닫습니다.
?>
위의 방법을 사용하면 다른 사용자의 phpinfo 정보를 저장할 수 있습니다. 이전에는 불가능했을 수도 있습니다! 마찬가지로, 버퍼 방식은 일반적인 방식으로 완료하기 어려운 작업을 저장하는 데 사용할 수 있습니다. 이는 실제로 일부 "프로세스"를 "기능"으로 변환하는 방법입니다.