> 백엔드 개발 > PHP 튜토리얼 > PHP 출력 버퍼링의 원리와 응용

PHP 출력 버퍼링의 원리와 응용

藏色散人
풀어 주다: 2023-04-07 17:36:01
앞으로
2052명이 탐색했습니다.

php 캐싱 프로세스

PHP를 요청하는 과정에서 실제로 세 가지 캐시를 거칩니다.

1. 프로그램 캐시

2. 브라우저 캐시

두 가지 캐시를 모두 엽니다.

1. php.ini에서 output_buffering = 4096을 구성하고 여기에서 ; 숫자를 제거하세요.

2 PHP 페이지에서 ob_start()를 사용하세요.

php.ini를 통해 열면 모든 PHP 페이지에 적용됩니다. ob_start()로 여는 것은 페이지에만 영향을 미칩니다

ob 캐시의 지식

서비스에서 ob 캐시를 활성화하면 에코 데이터가 먼저 ob에 들어갑니다

PHP 페이지가 끝까지 실행되면, ob 캐시된 데이터(있는 경우)는 프로그램 캐시로 강제로 새로 고쳐진 다음 데이터는 Apache를 통해 http 응답 패키지로 캡슐화되어 브라우저로 반환됩니다. ob가 없으면 모든 데이터가 직접 저장됩니다. 프로그램 캐시. 헤더 정보는 ob 활성화 여부에 관계없이 항상 프로그램 캐시에 저장됩니다.

ob 관련 함수

ob_start($callback)

//在当前页面中开启ob,注意callback
ob_start($callback);
로그인 후 복사
ob_get_contents()
//获取当前ob缓存中的内容
ob_get_contents()
로그인 후 복사

ob_get_clean()

//获取当前ob缓存中的内容,并且清空当前的ob缓存
ob_get_clean()
로그인 후 복사

ob_flush()

//将ob缓存中的内容,刷到程序缓存中,但并没有关闭ob缓存
ob_flush()
로그인 후 복사

ob_end_flush()

//关闭ob缓存,并将数据刷回到程序缓存中
ob_end_flush()
로그인 후 복사

ob _ 청소()

//将ob缓存中的内容清空
ob_clean()
로그인 후 복사

ob_end_clean( )

//将ob缓存中的数据清空,并且关闭ob缓存
ob_end_clean()
로그인 후 복사
b OB_START($ 콜백) 콜백

<?php
ob_start("callback_func");
function callback_func($str){
    return "callback".$str;
}
echo "123";//输出:callback123
로그인 후 복사

응용 시나리오

보낸 사람()이 오류를 보내기 전

<?php
echo "before_header";
header("Content-type:text/html;charset=utf-8");
echo "after_header";
로그인 후 복사
출력:

Warning: Cannot modify header information - headers already sent by (output started at /Users/shuchao/Desktop/test.php:2) in /Users/shuchao/Desktop/test.php on line 3
로그인 후 복사
E

해결책

Ob가 다음과 같은 경우 헤더를 보내기 전에 켜면 모든 에코 내용이 ob로 이동하여 오류가 해결됩니다.

<?php
ob_start();
echo "before_header\n";
header("Content-type:text/html;charset=utf-8");
echo "after_header\n";
로그인 후 복사

output

before_header
after_header
로그인 후 복사

위 내용은 PHP 출력 버퍼링의 원리와 응용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿