PHP를 사용하면 누구나 헤더와 setcookie 함수를 필연적으로 사용하게 됩니다. 이 두 함수는 파일 헤더 정보의 일부를 브라우저로 전송하지만, 이 두 함수를 사용하기 전에 출력이 있는 경우(공백 등의 빈 출력도 포함) , 캐리지 리턴 및 줄 바꿈)은 오류 메시지를 표시하며 프롬프트 정보는 다음과 같습니다. "헤더에 보낼 준비가 모두 완료되었습니다."! 그렇다면 출력 후 파일 헤더 정보를 보내는 방법이 있습니까? PHP 4.0에는 버퍼 제어를 위한 여러 기능이 추가되었습니다. 이러한 기능을 사용하면 많은 문제를 해결하는 데 도움이 될 수 있습니다.
1. 관련 기능 소개:
1. Flush : 버퍼에 있는 내용을 출력하고 버퍼를 삭제합니다. 함수 형식: 플러시() 설명: 이 함수는 자주 사용되며 매우 효율적입니다.
2. ob_start: 출력 버퍼 열기 함수 형식: void ob_start(void) 설명: 버퍼가 활성화되면 PHP 프로그램에서 파일이 아닌 모든 헤더 정보가 전송되지 않으며, 내부 버퍼에 저장됩니다. 버퍼의 내용을 출력하려면 ob_end_flush()를 사용하거나 ob_end_clean()을 사용하여 버퍼의 내용을 출력할 수 있습니다.
3, ob_get_contents: 내부 버퍼의 내용을 반환합니다. 사용법: string ob_get_contents(void) 설명: 이 함수는 현재 버퍼의 내용을 반환합니다. 출력 버퍼가 활성화되지 않은 경우 FALSE를 반환합니다.
4. ob_get_length: 내부 버퍼의 길이를 반환합니다. 사용법: int ob_get_length(void) 설명: 이 함수는 출력 버퍼가 활성화되지 않은 경우 ob_get_contents와 같이 현재 버퍼의 길이를 반환합니다. 거짓을 반환합니다.
5. ob_end_flush: 내부 버퍼의 내용을 브라우저로 보내고 출력 버퍼를 닫습니다. 사용법: void ob_end_flush(void) 설명: 이 함수는 출력 버퍼(있는 경우)의 내용을 보냅니다.
6. ob_end_clean: 내부 버퍼의 내용을 삭제하고 내부 버퍼를 닫습니다. 사용법: void ob_end_clean(void) 참고: 이 함수는 내부 버퍼의 내용을 출력하지 않습니다!
7. ob_implicit_flush: 절대 새로 고침을 켜거나 끕니다. 사용법: void ob_implicit_flush ([int flag]) 설명: Perl을 사용해 본 사람이라면 누구나 $|=x의 의미를 알고 있으며, 이 문자열은 버퍼를 열거나 닫을 수 있습니다. ob_implicit_flush 함수는 그것과 동일합니다. 기본값은 버퍼를 닫고 절대 출력을 여는 것입니다.
2. 사용 예 :
처음에 저자는 버퍼 제어 기능을 사용하면 파일 헤더에 정보를 보낼 때 오류를 방지할 수 있다고 말했습니다. 예는 다음과 같습니다.
------------------------------------------------------------- <? //PHP提示符 ob_start(); //打开缓冲区 echo "Hello/n"; //输出 header('location:gotourl.php'); //把浏览器重定向到gotourl.php ?> -------------------------------------------------------------
ob_start를 제거하면 PHP는 파일의 4번째 줄에서 오류 메시지를 표시하지만(오류 메시지는 위에 표시됨), ob_start를 추가하면 오류 메시지가 표시되지 않습니다. echo 뒤의 문자는 브라우저에 출력되지 않지만 서버에는 플러시 또는 ob_end_flush를 사용할 때까지 출력되지 않으므로 파일 헤더 출력 오류가 발생하지 않습니다.
아래에는 매우 고전적인 목적이 나와 있습니다.
예를 들어 Phpinfo ();? & Gt;를 사용하면 서버와 클라이언트의 설정 정보를 얻을 수 있지만 이 정보는 클라이언트에 따라 다릅니다. .. 원하는 경우 phpinfo() 함수의 출력을 저장하려면 어떻게 해야 합니까? 버퍼 제어가 없었기 전에는 전혀 해결책이 없었다고 할 수 있지만, 버퍼 제어를 이용하면 쉽게 해결할 수 있습니다:
------------------------------------------------------------- <? ob_start(); //打开缓冲区 phpinfo(); //使用phpinfo函数 $info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info $file=fopen('info.txt','w'); //打开文件info.txt fwrite($file,$info); //写入信息到info.txt fclose($file); //关闭文件info.txt ?> -------------------------------------------------------------
위의 방법을 이용하면 , 단지 다른 사용자의 phpinfo 정보를 저장할 수 있는데, 유감스럽게도 이전에는 이 작업을 수행할 방법이 없었습니다! 사실 위의 내용은 일부 "프로세스"를 "기능"으로 변환하는 방법입니다!
위 내용은 PHP에서 버퍼 제어를 위한 코드 예제에 대한 자세한 설명입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!