>  기사  >  백엔드 개발  >  PHP 출력 버퍼링의 원리와 응용

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

藏色散人
藏色散人앞으로
2019-10-22 13:43:071922검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제