ob 캐시 소개
ob은 출력 버퍼링, 출력 버퍼의 약자로, 버퍼는 php.ini의 output_buffering 변수를 통해 제어됩니다. 기본값은 off이며 버퍼를 열려면 on으로 설정할 수 있습니다. 버퍼를 호출한 후, 프로그램에서 ob 함수를 사용하지 않더라도 코드에서는 실제로 버퍼를 사용합니다. 또한 php.ini의 output_buffering 설정과 상관없이 cli 모드의 php는 기본적으로 항상 꺼져 있습니다. 왜 버퍼인가? 쉽게 말하면 고속 CPU가 자체 데이터를 일찍 처리해 회선을 통해 사용자에게 전달하고 싶은데 회선이 너무 좁아 한꺼번에 전송할 수 없다는 것이다. 버퍼가 도입되면 CPU는 생성된 데이터를 버퍼에 신속하게 넣은 다음 시원한 곳에서 휴식할 수 있습니다. 버퍼는 명령에 따라 적시에 데이터를 출력합니다. 이는 고속 CPU와 저속 I/O 장치 간의 모순을 효과적으로 해결합니다.
ob의 기본 원리: ob 캐시가 켜져 있으면 에코 데이터가 먼저 ob 캐시에 배치됩니다. 헤더 정보인 경우 프로그램 캐시에 직접 배치됩니다. 페이지가 끝까지 실행되면 ob 캐시된 데이터가 프로그램 캐시에 저장되었다가 차례로 브라우저로 반환됩니다.
ob의 기본 기능:
1) 브라우저에서 오류가 출력된 후 헤더 파일을 전송하기 위해 setcookie(), header() 또는 session_start() 사용을 방지합니다. 기능으로 인해 발생합니다. 사실 이런 종류의 사용법은 덜 자주 사용하고 좋은 코딩 습관을 기르는 것이 더 좋습니다.
2) 일부 얻을 수 없는 함수의 출력을 캡처합니다. 예를 들어 phpinfo()는 많은 HTML을 출력하지만 현재로서는 $info=phpinfo();와 같은 변수를 사용하여 캡처할 수 없습니다. 유용할 것입니다.
3) gzip 압축, 중국어 간체와 번체 간 변환, 일부 문자열 교체 등 출력 콘텐츠를 처리합니다.
4) 정적 파일 생성은 실제로 전체 페이지의 출력을 캡처한 다음 파일로 저장하는 것입니다. HTML 생성이나 전체 페이지 캐싱에 자주 사용됩니다.
ob 관련 기능 상세 설명
1. Flush: 버퍼의 내용을 새로 고쳐서 출력합니다.
함수 형식:
flush()
설명: 이 함수는 자주 사용되며 매우 효율적입니다.
2. ob_start: 출력 버퍼 열기
함수 형식:
void ob_start(void)
설명: 버퍼가 활성화되면 PHP 프로그램의 파일이 아닌 모든 헤더 정보가 전송되지 않습니다. 내부 버퍼에 저장됩니다. 버퍼의 내용을 출력하려면 ob_end_flush() 또는 플러시()를 사용하여 버퍼의 내용을 출력할 수 있습니다.
3. ob_get_contents: 내부 버퍼의 내용을 반환합니다.
사용법:
string ob_get_contents(void)
설명: 이 함수는 현재 버퍼의 콘텐츠를 반환합니다. 출력 버퍼가 활성화되지 않은 경우 FALSE를 반환합니다.
4. ob_get_length: 내부 버퍼의 길이를 반환합니다.
사용법:
int ob_get_length(void)
설명: 이 함수는 출력 버퍼가 활성화되지 않은 경우 ob_get_contents와 동일하게 현재 버퍼의 길이를 반환합니다. 그런 다음 FALSE를 반환합니다.
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 함수는 그것과 동일합니다. 기본값은 버퍼를 닫는 것입니다. 절대 출력을 켠 후에는 각 스크립트 출력이 브라우저로 직접 전송되며, 플러시()
플러시 함수의 예제 코드는 다음과 같습니다.
<?php for($i = 1; $i <= 300; $i++ ) print(" "); // 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经 // 过测试,发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会源源不断的被发送出去。 For($j = 1; $j <= 20; $j++) { echo $j.""; flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上 sleep(1); //让程序"睡"一秒钟,会让你把效果看得更清楚 } ?>설명: 플러시()는 매우 효율적인 함수입니다. >cachebrowser 🎜>.ob 시리즈 기능에 대한 예시 코드:
예를 들어, 브라우저의 설정 정보를 사용할 수 있습니다. 그러나 이 정보는 클라이언트에 따라 다를 수 있습니다. phpinfo() 함수의 출력을 저장하려면 어떻게 해야 합니까? 버퍼 컨트롤이 없었기 전에는 전혀 방법이 없었다고 할 수 있지만, 버퍼 컨트롤을 이용하면 쉽게 해결할 수 있습니다.
<?php 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 ob_start();//打开缓冲区 //php页面的全部输出 $content = ob_get_contents();//取得php页面输出的全部内容 $fp = fopen("output00001.html", "w"); //创建一个文件,并打开,准备写入 fwrite($fp, $content); //把php页面的内容全部写入output00001.html,然后…… fclose($fp); ?>소위 정적 템플릿 기술은 특정 방법을 사용하여 사용자가 생성된 HTML 페이지를 얻을 수 있도록 하는 것입니다. 클라이언트 측의 PHP. 이 HTML 페이지가 더 이상 업데이트되지 않으면 다른 사용자가 이 페이지를 다시 탐색할 때 프로그램은 더 이상 PHP 및 관련 데이터베이스를 호출하지 않습니다. 많은 양의 정보가 있는 일부 웹사이트의 경우 이와 같은 기술은 엄청난 이점을 가져올 것입니다. 【관련 추천 튜토리얼】1. "
php.cn Dugu Jiujian (4) - PHP 비디오 튜토리얼
"2. 초급부터 숙달까지 PHP 프로그래밍에 대한 전체 튜토리얼 세트
위 내용은 PHP ob 캐시 소개 및 ob 기능에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!