header 와 버퍼 간 의 심층 분석
<?php
echo 'hello world!';
header('content-type: text/html;charset=utf-8;');
나 는 테스트 를 거 쳤 을 때 성공 할 수 있 으 며 어떠한 오류 와 경고 도 일어나 지 않 을 것 이다.어떻게 지 내 셨 는 지 모 르 겠 어 요.그러나 대부분 문제 가 없다 고 생각 합 니 다.Cannot modify header information - headers already sent
이런 경고 가 나 오 면 머리 메 시 지 를 수정 할 수 없고 머리 메 시 지 는 이미 보 냈 습 니 다.내 려 와 서 왜 두 가지 다른 결과 가 나 왔 는 지 알 아 볼 까요?버퍼
비 유 를 하면 우리 가 영 화 를 볼 때의 캐 시 와 같다.그것 은 우리 에 게 즉시 재생 되 지 않 고 먼저 다운로드 한 영 화 를 캐 시 에 넣 은 다음 캐 시 로 재생 합 니 다.저희 가 php 코드 를 만 드 는 것 도 이 렇 습 니 다.
php 캐 시 메커니즘
-output_buffering
php 에서 자주 사용 되 는 함수ob
ob_start:출력 버퍼 열기ob_clean: 버퍼 제거
ob_get_contents: 버퍼 내용 되 돌리 기
ob_get_clean: 버퍼 내용 을 되 돌려 주 고 비 웁 니 다.
<?php
ob_start();
echo 'hello world!';
echo ob_get_contents();// hello world!hello world!
php.ini 설정 파일 에서 버퍼 크기 변경일반적으로 233 줄 정도 이 고,기본 값 은 4096 으로 4096 바이트 즉 4kB 를 나타 낸다.
내 려 와 서 4096 을 5 로 수정 하고 이 코드 를 다시 실행 합 니 다.
<?php
echo 'hello world!';
header('content-type: text/html;charset=utf-8;');
방금 테스트 에서 경고 나 오류 가 발생 하지 않 았 는데 지금 오류 가 발생 했 습 니 다.오 류 는 바로:Cannot modify header information - headers already sent
입 니 다.header 와 버퍼 사이 의 분석
왜?
header 함수 에 대해 클 라 이언 트 가 원본 http 헤 더 를 보 내 는 것 은 우리 가 쓴 웹 페이지 가 도대체 어떤 내용 인지 설명 하 는 것 입 니 다.따라서 이 성명 전에 내용 이 있 으 면 잘못된 것 이 고 http 규칙 에 부합 되 지 않 습 니 다.
내 려 와 서 phop 의 header 를 말 해 보 세 요.
php 에서 header 는 버퍼 를 거치 지 않 고 서버 를 거 쳐 클 라 이언 트 로 직접 출력 합 니 다.
이전 경고 설명 Cannot modify header information
헤더 에 출력 을 썼 을 때 버퍼 를 먼저 지나 갑 니 다.따라서 앞에서 썼 더 라 도 최종 출력 순 서 는 header
echo
에 있 습 니 다.그러나 우리 가 출력 한 콘 텐 츠 캐 시 영역 은 이전 출력
hello world!'
>5 바이트 입 니 다.바로 출력 됩 니 다.즉,이렇게 먼저 지고 'hello world'
다시header(...),
이렇게 하면 실제 header 에 어 긋 나 기 전에 출력 이 있 으 면 안 됩 니 다.총결산
실제 상황 에서 우 리 는 header 를 페이지 맨 앞 에 쓰 는 것 이 좋 겠 다.헤더 이전의 출력 내용 이 버퍼 를 내 려 놓 을 수 있 을 지 확실 하지 않 기 때문이다.본문 이 모두 에 게 phop 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.