PHP flush()와 obflush()의 차이 상세 설명
이 두 함수 의 사용 은 아마도 많은 사람들 이 가장 현혹 되 는 문제 일 것 이다.수첩 에서 두 함수 에 대한 해석 도 상세 하지 않 고 그들의 차 이 를 명확 하 게 지적 하지 않 았 다.마치 두 함수 의 기능 은 모두 출력 캐 시 를 새로 고 치 는 것 같다.그러나 우리 글 의 초기 코드 에서 fush()를 ob 로 바 꾸 면flush(),프로그램 이 더 이상 정확하게 실 행 될 수 없습니다.분명히 그것들 은 차이 가 있다.그렇지 않 으 면 수첩 에서 그 중 하나 가 다른 함수 의 별명 이라는 것 을 직접 설명 하면 된다.따로 설명 할 필요 가 없다.그렇다면 이들 의 차 이 는 무엇 일 까?캐 시 를 열지 않 았 을 때 스 크 립 트 출력 내용 은 서버 에서 출력 을 기다 리 는 상태 입 니 다.flush()는 출력 을 기다 리 는 내용 을 클 라 이언 트 에 즉시 보 낼 수 있 습 니 다.
캐 시 를 열 면 스 크 립 트 출력 내용 이 출력 캐 시 에 저 장 됩 니 다.이 때 출력 대기 상태 에 있 는 내용 이 없습니다.flush()를 직접 사용 하면 클 라 이언 트 에 아무런 내용 도 보 내지 않 습 니 다.그리고 obflush()의 역할 은 출력 캐 시 에 존재 하 는 내용 을 꺼 내 출력 대기 상태 로 설정 하지만 클 라 이언 트 에 직접 보 내지 않 습 니 다.이 럴 때 ob 를 먼저 사용 해 야 합 니 다.flush()를 다시 flush()를 사용 해 야 클 라 이언 트 가 스 크 립 트 의 출력 을 즉시 얻 을 수 있 습 니 다.
하나 flush 와 obflush 의 정확 한 순서,정확 한 것 은'선 ob'입 니 다.flush 재 flush,다음 과 같 음:obflush();flush();웹 서버 의 운영 체제 가 windows 시스템 이 라면 순 서 를 뒤 바 꾸 거나 ob 를 사용 하지 않 습 니 다.flush()도 문제 가 없 을 겁 니 다.인증 이 필요 합 니 다]하지만 Linux 시스템 에 서 는 출력 버퍼 를 새로 고 칠 수 없습니다.출력 버퍼 링 함수 1.bool obstart ([ callback $output_callback [, int $chunk_size[,bool$erase]]])출력 활성화buffering 메커니즘.활성화 되면 스 크 립 트 출력 은 브 라 우 저 에 직접 나 오지 않 고 phop buffer 메모리 영역 을 잠시 기록 합 니 다.php 기본 오픈 outputbuffering 메커니즘,단지 ob 호출 을 통 해start()함수 outputbuffering 값 이 충분 하 게 확장 되 었 습 니 다.$chunk 도 지정 할 수 있 습 니 다.size 로 output 지정buffering 의 값 입 니 다.$chunk_size 기본 값 은 0 입 니 다.스 크 립 트 가 실 행 될 때 까지 phop buffer 의 데 이 터 를 브 라 우 저 로 보 냅 니 다.만약 당신 이$chunk 를 설정 했다 면size 의 크기 는 buffer 의 데이터 길이 가 이 값 에 도달 하면 buffer 의 데 이 터 를 브 라 우 저 에 보 냅 니 다.물론$ouput 를 지정 할 수 있 습 니 다.callback,buffer 의 데 이 터 를 처리 합 니 다.예 를 들 어 함수 obgzhandler,buffer 의 데 이 터 를 압축 한 후 브 라 우 저 에 전송 합 니 다.세 번 째 인자:캐 시 를 지 울 지 여부 입 니 다.선택 할 수 있 습 니 다.기본 값 은 true 입 니 다.false 로 설정 하면 스 크 립 트 실행 이 끝 날 때 까지 캐 시 는 삭제 되 지 않 습 니 다.2.ob_get_contents 는 phop buffer 의 데이터 복사 본 을 가 져 옵 니 다.주의해 야 할 것 은,당신 은 ob 에 있 을 것 입 니 다.end_clean()함수 호출 전에 이 함 수 를 호출 합 니 다.그렇지 않 으 면 obget_contents()빈 문자 로 되 돌려 줍 니 다.ob 사용 가능get_contents()는 서버 캐 시 데 이 터 를 문자열 로 가 져 오고 ob 를 사용 합 니 다.end_flush()는 캐 시 된 데 이 터 를 출력 하고 캐 시 를 닫 습 니 다.ob 사용end_clean()은 데이터 나 다른 행동 없 이 서버 캐 시 데 이 터 를 조용히 삭제 합 니 다.서버 의 캐 시 는 쌓 여 있 습 니 다.즉,ob 를 열 고 있 습 니 다.start()후 닫 기 전에 내부 에 다른 캐 시 ob 를 열 수 있 습 니 다.start()。하지만 캐 시 를 닫 는 작업 과 캐 시 를 여 는 작업 이 똑 같이 많 음 을 보증 해 야 합 니 다.ob_start()는 캐 시 데 이 터 를 처리 하기 위해 반전 함 수 를 지정 할 수 있 습 니 다.만약 obstart()내부 에 다른 ob 가 내장 되 어 있 습 니 다.start(),우 리 는'외층 의 ob'라 고 가정 합 니 다.start(),번 호 는 A,내부 ob 입 니 다.start()번 호 는 B 입 니 다.각각 functionA 와 functionB 를 만 들 었 습 니 다.그러면 캐 시 B 의 데이터 출력 을 할 때 선배 funcitonB 반전 함수 로 처리 하고 외부 functionA 반전 함수 에 맡 겨 처리 한 후에 야 클 라 이언 트 에 출력 할 수 있 습 니 다.또한,매 뉴 얼 에 따 르 면 일부 웹 서버,예 를 들 어 apache 는 리 셋 함 수 를 사용 하면 프로그램의 현재 작업 디 렉 터 리 를 바 꿀 수 있 습 니 다.해결 방법 은 리 셋 함수 에서 자체 적 으로 작업 디 렉 터 리 를 수 동 으로 수정 하고 chdir 함수 로 수정 하 는 것 입 니 다.이 점 은 자주 만 나 지 않 는 것 같 습 니 다.만 났 을 때 매 뉴 얼 을 찾 아 보 세 요.3.ob_end_flush 와 obend_clean 이 두 함수 가 비슷 해서 ouptu 를 닫 습 니 다.buffering 메커니즘.하지만 다른 것 은 obend_flush 는 phop buffer 의 데 이 터 를 클 라 이언 트 브 라 우 저 에 충 전 했 을 뿐 obclean_clean 은 php bufeer 의 데 이 터 를 비우 지만 클 라 이언 트 브 라 우 저 에 보 내지 않 습 니 다.ob_end_flush 호출 전,phop buffer 의 데 이 터 는 여전히 존재 합 니 다.obget_contents()는 php buffer 의 데 이 터 를 복사 할 수 있 습 니 다.
그리고 obend_flush()호출 후 obget_contents()에서 가 져 온 것 은 빈 문자열 이 며,브 라 우 저 에서 도 출력 을 받 을 수 없습니다.즉,출력 이 없습니다.
ob 사용 가능get_contents()는 서버 캐 시 데 이 터 를 문자열 로 가 져 오고 ob 를 사용 합 니 다.end_flush()는 캐 시 된 데 이 터 를 출력 하고 캐 시 를 닫 습 니 다.ob 사용end_clean()은 데이터 나 다른 행동 없 이 서버 캐 시 데 이 터 를 조용히 삭제 합 니 다.서버 의 캐 시 는 쌓 여 있 습 니 다.즉,ob 를 열 고 있 습 니 다.start()후 닫 기 전에 내부 에 다른 캐 시 ob 를 열 수 있 습 니 다.start()。하지만 캐 시 를 닫 는 작업 과 캐 시 를 여 는 작업 이 똑 같이 많 음 을 보증 해 야 합 니 다.ob_start()는 캐 시 데 이 터 를 처리 하기 위해 반전 함 수 를 지정 할 수 있 습 니 다.만약 obstart()내부 에 다른 ob 가 내장 되 어 있 습 니 다.start(),우 리 는'외층 의 ob'라 고 가정 합 니 다.start(),번 호 는 A,내부 ob 입 니 다.start()번 호 는 B 입 니 다.각각 functionA 와 functionB 를 만 들 었 습 니 다.그러면 캐 시 B 의 데이터 출력 을 할 때 선배 funcitonB 반전 함수 로 처리 하고 외부 functionA 반전 함수 에 맡 겨 처리 한 후에 야 클 라 이언 트 에 출력 할 수 있 습 니 다.또한,매 뉴 얼 에 따 르 면 일부 웹 서버,예 를 들 어 apache 는 리 셋 함 수 를 사용 하면 프로그램의 현재 작업 디 렉 터 리 를 바 꿀 수 있 습 니 다.해결 방법 은 리 셋 함수 에서 자체 적 으로 작업 디 렉 터 리 를 수 동 으로 수정 하고 chdir 함수 로 수정 하 는 것 입 니 다.이 점 은 자주 만 나 지 않 는 것 같 습 니 다.만 났 을 때 매 뉴 얼 을 찾 아 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.