PHP 출력 버퍼 제어(출력 제어)상세 설명
사실 저 는 phop ob 시리즈 에 대한 인상 이 모호 합 니 다.구체 적 으로 어떻게 놀 았 는 지 잘 모 르 겠 습 니 다.평소에 curd 는 이런 내용 에 대해 깊이 있 지 않 습 니 다.페 퍼 로 서 부 끄 럽 습 니 다.인터넷 에서 검색 한 결과 서로 copy,코드 운행 에 작가 가 묘사 한 현상 이 나타 나 면 안 되 고 본 고 는 양심 적 으로 제품 을 만 들 었 으 며 코드 는 모두 작가 가 운행 한 것 이다.
출력 을 실행 할 때,예 를 들 어 echo,print.출력 은 웹 서버 에 즉시 보 내지 않 고 php buffer 에 데 이 터 를 기록 합 니 다.php output_buffering 메커니즘 의 장점 은 당연히 성능 을 향상 시킨다.사실 php 파일 은 최종 적 으로 브 라 우 저 에 표 시 됩 니 다.3 개의 버퍼 단 계 를 거 쳤 습 니 다:php buffer=웹 server buffer=browser buffer.마지막 으로 브 라 우 저 보이 기
기본적으로 php buffer 는 열 려 있 고 이 buffer 의 기본 값 은 4096,즉 4kb 입 니 다.php.ini 프로필 에서 output 를 찾 을 수 있 습 니 다.buffering 설정.buffer 는 메모리 주소 공간 입 니 다.Linux 시스템 의 기본 크기 는 보통 4096(4kb),즉 메모리 페이지 입 니 다.주로 저장 속도 가 동기 화 되 지 않 는 장치 나 우선 순위 가 다른 장치 간 에 데 이 터 를 전송 하 는 구역 에 사용 된다.buffer 를 통 해 프로 세 스 간 의 상호 기다 림 을 줄 일 수 있 습 니 다.여기 서 통속 적 인 예 를 들 어 텍스트 편집 기 를 열 어 파일 을 편집 할 때 한 문 자 를 입력 할 때마다 운영 체 제 는 이 문 자 를 디스크 에 직접 쓰 지 않 고 buffer 에 먼저 기록 합 니 다.buffer 에 가득 쓸 때 만 buffer 의 데 이 터 를 디스크 에 기록 합 니 다.물론 커 널 함수 flush()를 호출 할 때.버퍼 의 더러 운 데 이 터 를 디스크 에 다시 쓰 도록 강제 합 니 다.
예 를 들다
<?php
echo " <br>";
header("content-type:text/html;charset='utf-8'");
echo " !";
//output
//
//
header()는 실제 출력 전에 호출 해 야 하지만 프로그램 은 출력 되 었 지만 정상적으로 작 동 합 니 다.아래 코드 를 보고 있 습 니 다:
<?phpecho " <br>";
ob_flush();
header("content-type:text/html;charset='utf-8'");
echo " !";
//output
//
//Cannot modify header information - headers already sent by (output started at E:\php\test.php:3)
//
위의 프로그램 은 프로그램 이 즉시 출력 되 지 않 고 ob 를 호출 할 때 설명 합 니 다.flush 함수 일 때 만 버퍼,출력 을 새로 고 칩 니 다.ob_flush()와 flush()
ob_flush(),flush()함수 phop 매 뉴 얼 에 상세 한 설명 이 있 으 니 찾 아 보 세 요.양자 의 차 이 는:
ob_flush()는 PHP 자체 버퍼 새로 고침
flush()는 웹 서버 서버 를 새로 고 치 는 버퍼 입 니 다.브 라 우 저 로 출력 합 니 다.하지만 다음 과 같은 상황 이 발생 할 수 있다.
<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo ' '."<BR>";
ob_flush();
flush();
sleep(1);
echo ' ';
//output
위의 코드 는 chrome 브 라 우 저 위 에서 한 줄 한 줄 의 출력 이 고 ie 시리즈 의 브 라 우 저 는 모든 출력 입 니 다.사실은 위의 네 번 째 브 라 우 저 입 니 다.256 자 를 받 아야 표시 합 니 다.위의 코드 를 아래 형식 으로 바 꿉 니 다.
<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo str_pad('',240)."
";
echo ' '."<BR>";
ob_flush();
flush();
sleep(1);
echo ' ';
//output
이렇게 하면 i 아래 에서 한 줄 한 줄 출력 합 니 다.256 글자 가 넘 기 때 문 입 니 다.ob 기타 함수 설명
1.ob_end_flush 와 obend_clean
end 는 말 그대로 끝 납 니 다.버퍼 를 닫 습 니 다.모두 출력 버퍼 를 닫 습 니 다.하 나 는 출력 버퍼 이 고 하 나 는 제거 입 니 다.예 를 들 면
<?php
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo 'before';
ob_end_clean();
echo str_pad('',4096)."
";
for ($i=10; $i>0; $i--)
{
echo $i;
sleep(1);
}
위 코드 는 출력 이 아 닌 모든 내용 을 출력 합 니 다.ob_end_clean()버퍼 가 꺼 진 거 아니에요?왜 하나의 출력 이 아 닙 니까?사실 우리 위 에서 도 말 했 듯 이 phop 은 브 라 우 저 에 직접 출력 하 는 것 이 아니 라 웹 server 입 니 다.php 에 버퍼 가 없 지만그래도 웹 서버 는 있어 요.그래서 다음 코드:
/**
Server:LightTPD/1.4.28 (Win32)
X-Powered-By:PHP/5.3.27
*/
echo 'before';
ob_end_clean();
echo str_pad('',4096)."
";
for ($i=10; $i>0; $i--)
{
flush();
echo $i;
sleep(1);
}
flush()를 더 하면 한 줄 한 줄 출력 합 니 다.하면,만약,만약...end_clean 을 ob 로 바꾸다end_flush before 를 지 겠 습 니 다.기타 함 수 는 수첩 을 참고 할 수 있어 비교적 간단 하 다.
총결산
php 스 크 립 트 를 브 라 우 저 로 이동 하려 면 php buffer=》web server buffer=》browser buffer。 마지막 으로 브 라 우 저 에 표 시 됩 니 다.하나 가 없어 서 는 안 된다.그래서 우 리 는 obflush 와 flush echo str_pad(',4096)만 당신 이 원 하 는 효 과 를 디 버 깅 할 수 있 습 니 다.
이상 은 PHP 버퍼 에 대한 자 료 를 정리 한 다음 에 관련 자 료 를 계속 보충 하 는 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.