>백엔드 개발 >PHP 튜토리얼 >PHP의 버퍼 제어를 위한 코드 예제에 대한 자세한 설명

PHP의 버퍼 제어를 위한 코드 예제에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-08 10:12:331694검색

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(&#39;location:gotourl.php&#39;);   
    //把浏览器重定向到gotourl.php     
    ?>    
     -------------------------------------------------------------


ob_start를 제거하면 PHP는 파일의 4번째 줄에서 오류 메시지를 표시하지만(오류 메시지는 위에 표시됨), ob_start를 추가하면 오류 메시지가 표시되지 않습니다. echo 뒤의 문자는 브라우저에 출력되지 않지만 서버에는 플러시 또는 ob_end_flush를 사용할 때까지 출력되지 않으므로 파일 헤더 출력 오류가 발생하지 않습니다.
아래에는 매우 고전적인 목적이 나와 있습니다.
예를 들어

 -------------------------------------------------------------     
    <?     ob_start();   //打开缓冲区     
    phpinfo();   //使用phpinfo函数     
    $info=ob_get_contents();   //得到缓冲区的内容并且赋值给$info     
    $file=fopen(&#39;info.txt&#39;,&#39;w&#39;);   //打开文件info.txt     
    fwrite($file,$info);   //写入信息到info.txt     
    fclose($file);   //关闭文件info.txt     ?>     
    -------------------------------------------------------------


위의 방법을 이용하면 , 단지 다른 사용자의 phpinfo 정보를 저장할 수 있는데, 유감스럽게도 이전에는 이 작업을 수행할 방법이 없었습니다! 사실 위의 내용은 일부 "프로세스"를 "기능"으로 변환하는 방법입니다!

위 내용은 PHP에서 버퍼 제어를 위한 코드 예제에 대한 자세한 설명입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.