미지급 정보 헤더. 오류 수정: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 전송되었습니다.

이 기사에서는 어떤 헤더가 무엇을 담당하는지 자세히 설명하지 않고 어떤 헤더가 필요한지 살펴보겠습니다. 가장 일반적인 제목의 역할은 후속 기사에서 설명됩니다.

시리즈의 모든 기사:

  • HTTP 헤더란 무엇입니까? 일반 이론.

HTTP하이퍼텍스트 전송 프로토콜을 의미합니다. 프로토콜은 서로 다른 장치가 데이터를 교환하는 데 사용되는 규칙 집합입니다. 1990년대에 만들어졌습니다. 이제는 인터넷의 거의 모든 곳에서 사용됩니다. 브라우저 창에 표시되는 모든 내용은 이 프로토콜을 통해 얻은 것입니다. http 헤더는 아마도 장치 간 통신에서 가장 중요한 것일 것입니다. 이는 설정된 연결에 대한 기본 정보와 이 연결을 통해 전송되는 정보를 전달합니다.
두 장치 간의 통신 다이어그램을 살펴보겠습니다. 다음 장치를 귀하의 컴퓨터와 인터넷의 일부 서버로 삼으십시오.

보시다시피 브라우저는 http 요청을 보냈습니다. 다음과 같이 보일 수 있습니다.

GET /other-19 HTTP/1.1
호스트: www.scriptsite.ru
사용자 에이전트: Mozilla/5.0(Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5(.NET CLR 3.5.30729)
수락: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
허용 언어: ru,en-us;q=0.7,en;q=0.3
승인-인코딩: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
연결 유지: 300
연결: 연결 유지

이 경우 첫 번째 줄은 요청 줄이고 다른 모든 줄은 요청, 이 정보를 요청하는 클라이언트 및 기타 여러 사항에 대한 추가 정보를 전달하는 http 헤더입니다.
요청에 대한 응답으로 서버는 다음 헤더를 보낼 수 있습니다.

서버: Apache/2.0.61(Unix) mod_ssl/2.0.61 OpenSSL/0.9.8k mod_dp20/0.99.2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6 (2007-09-24)

X-Powered-By: PHP/5.2.5

쿠키 설정: PHPSESSID=ft47gokfee6amv3eda3k1p93s3; 경로=/

캐시 제어: 저장 안 함, 캐시 안 함, 재검증 필수, 사후 확인=0, 사전 확인=0

Pragma: 캐시 없음

연결 유지: 시간 제한=10, 최대=1024

연결: 연결 유지

전송 인코딩: 청크

콘텐츠 유형: 텍스트/html

첫 번째 줄은 상태 줄입니다. 나머지 줄은 헤더입니다. 다이어그램은 페이지의 콘텐츠도 로드되는 것을 보여줍니다. 그러나 이 콘텐츠는 일반적으로 헤더 뷰어 플러그인에 표시되지 않습니다. 그리고 페이지의 내용은 특별한 경우일 뿐입니다. 프로토콜에 따르면 페이지를 반드시 전송할 필요는 없습니다. 대신 사진, 사운드 파일, 비디오를 전송할 수 있습니다. 그리고 그들 모두는 매우 다른 제목을 갖게 될 것입니다.

http 헤더를 보는 방법은 무엇입니까?

http 헤더를 보려면 Firefox 브라우저에 다음 플러그인을 권장합니다.

Chrome 브라우저를 사용하는 경우 설정 버튼 - 도구 - 개발자 도구를 클릭하면 모든 정보를 볼 수 있습니다. 네트워크 탭.
저는 이 브라우저를 사용하는 사람이 아니기 때문에 Opera 브라우저 사용자에게 어떤 조언도 드릴 수 없습니다. 플러그인이 설치되고 실행되면 페이지를 새로 고쳐 보십시오. 브라우저가 서버와 통신하는 데 사용된 거대한 요청 및 응답 목록을 즉시 볼 수 있습니다.

Http 헤더 및 PHP에서 해당 헤더에 대한 액세스

PHP 개발자라면 getallheaders() 함수를 사용하여 요청 헤더에 액세스할 수 있습니다. 작동 방식을 이해하기 위해 다음 코드를 실행해 보겠습니다.

그리고 우리는 헤더 배열의 출력물을 얻습니다.

그러나 더 자주 전역 변수 $_SERVER를 통해 액세스됩니다. 거의 모든 http 헤더에는 HTTP_header_name 원칙에 따라 형성된 이 변수에 유사한 요소 이름이 있습니다. 따라서 동일한 'User_Agent'에 대해 $_SERVER['HTTP_USER_AGENT']; 변수가 있습니다.

서버가 사용자에게 보낼 헤더를 얻으려면 headers_list() 함수가 사용됩니다. 일반적으로 서버는 모든 스크립트 끝에 누락된 필수 헤더를 구성합니다. 따라서 이 배열에는 스크립트 실행이 시작되기 전에 서버가 생성한 헤더(변경되지 않음) 또는 수동으로 설정한 헤더가 포함됩니다. 함수 헤더(“헤더 텍스트”)를 사용하여 수동으로 설정할 수 있습니다.
다음 코드를 실행해 보겠습니다.

함수가 호출될 때 전송할 준비가 된 헤더의 출력물을 볼 수 있습니다.

첫 번째 헤더는 자동으로 설정되었으며 스크립트가 실행 중인 서버의 이름을 전달합니다. 두 번째는 우리가 수동으로 설치했습니다. 브라우저에 "Fruit" 헤더가 필요한 경우 서버의 http 응답에서 이를 가져와 사용합니다. 하지만 우리 브라우저는 그것을 필요로 하지 않기 때문에, 이해하지 못하는 줄을 단순히 무시합니다.

HTTP 요청 구조

우리의 요청은 다음과 같습니다:

앞서 언급했듯이 첫 번째 줄은 쿼리 줄입니다. 이는 세 부분으로 구성됩니다.

  • 방법(방법) - 요청 유형을 나타냅니다. 가장 일반적인 방법: GET, POST, HEAD. 이에 대해서는 다음 단락에서 설명하겠습니다.
  • (경로) - 일반적으로 도메인 뒤에 오는 URL의 일부입니다. 예를 들어, 주소 표시줄에 http://www.scriptsite.ru/about/을 입력하면 경로 값은 /about/이 됩니다.
  • 규약(프로토콜) — 사용된 프로토콜입니다. 일반적으로 "HTTP"와 프로토콜 버전으로 구성됩니다. 일반적으로 최신 브라우저는 버전 1.1을 사용합니다.

다음으로 "이름: 값" 형식의 문자열 형태로 된 헤더가 옵니다.
그런데 쿠키 데이터도 이 요청에서 헤더 중 하나로 전송됩니다. 이 줄의 대부분은 선택 사항입니다. 쿼리는 단 두 줄로 줄일 수 있습니다.

GET /article/show/4/ HTTP/1.1

호스트: scriptsite.ru

요청 방법

얻다

가져오기 요청은 일반적으로 문서를 요청하고 일부 매개변수를 전달하는 데 사용됩니다.
이는 HTML 페이지, 이미지, CSS 및 JavaScript 파일 등을 가져오는 데 사용되는 주요 방법입니다.
매개변수는 무엇이든 될 수 있고 서버는 매개변수 처리 방법에 제한을 두지 않기 때문에 데이터 요청 방법을 사용하여 정보를 전송하는 경우가 많습니다. 예를 들어, 다음과 같은 형식이 있습니다.

이 경우 해당 매개변수는 브라우저의 주소 표시줄에 표시됩니다.

우편

Post는 서버에 데이터를 보내는 데 사용되는 방법입니다. 브라우저의 주소 표시줄을 통해 GET 메소드를 사용하여 서버에 데이터를 보낼 수 있지만 대부분의 경우 POST를 사용하는 것이 좋습니다. GET을 통해 대량의 데이터를 보내는 것은 비현실적입니다. 또한 GET에는 단 하나의 브라우저 라인을 통해 내 웹 사이트에 이 기사를 게시하는 것을 허용하지 않는 몇 가지 제한 사항이 있습니다. POST 요청은 웹 양식을 제출하는 데 가장 자주 사용됩니다. 이전 예제의 양식을 수정하여 POST 메서드를 제공하겠습니다.

오늘 우리는 메시지가 무엇을 의미하는지에 대해 이야기하기로 결정했습니다. "경고: 헤더 정보를 수정할 수 없습니다. (/home/...에서 출력이 시작되었습니다."에서 이미 보낸 헤더입니다.", 기본 콘텐츠 대신 사이트 페이지에 표시됩니다.
결과적으로 이 주제에 관해 인터넷에는 충분한 글이 있지만 그것이 의미하는 바와 제거 방법에 대한 일반화 된 지침은 없습니다.
우리는 개인적으로 이 문제에 직면했기 때문에 이 주제에 대한 거대한 정보 바다에 몇 방울을 추가하기로 결정했습니다.

얼마 전 우리는 여러 클라이언트 사이트를 한 호스팅에서 다른 호스팅으로 이전했습니다.
모든 것이 잘 진행되었고 사이트에 액세스할 수 있었지만 관리자로 로그인을 시도했습니다. 패널에서 로그인과 비밀번호를 입력하면 제어판 대신 흰색 페이지가 나타납니다.
다른 사이트에서도 확인했는데 마찬가지였습니다.
가능한 이유를 찾기 위해 오류 표시를 활성화했습니다.
이렇게 하려면 FTP를 통해 사이트 루트에 있는 .htaccess 파일을 편집하고 다음 줄을 추가해야 합니다.

Php_flag 디스플레이_오류 켜짐

그 후 관리자 패널에 들어가면 "경고: 헤더 정보를 수정할 수 없습니다. 헤더는 /home/.../에서 (/home/.../functions.php:1552에서 시작된 출력)에 의해 이미 전송되었습니다."와 같은 여러 메시지가 나타납니다. 362행의 public_html /wp-login.php” 등

검색 결과, 이 메시지는 헤더 정보가 이미 이전에 전송되었기 때문에 헤더 정보를 변경할 수 없음을 알리고 괄호 안에 이 작업이 수행된 파일 행이 표시된다는 정보가 발견되었습니다. .


제목 (헤더)은 해당 사이트가 위치한 서버의 서비스 정보입니다. 브라우저는 사이트의 콘텐츠를 표시하기 전에 페이지 캐싱 활성화 여부, 인코딩, 페이지 콘텐츠 유형 등 다양한 데이터를 나타내는 헤더를 서버로부터 수신합니다. 사이트 콘텐츠 관리 시스템에서 헤더는 다양한 시스템 파일에 있는 기능에 의해 생성됩니다.
필수 조건- 헤더는 페이지의 주요 내용(content) 이전에 전송되어야 합니다.


사이트의 콘텐츠가 헤더보다 먼저 전송되면 "경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 ...에서 전송되었습니다."라는 메시지가 표시되는 상황이 발생합니다.

어떤 상황에서 이런 일이 발생할 수 있나요? 이미 언급했듯이 최신 CMS에서 헤더는 하나 이상의 기능의 결과입니다. 함수 자체는 초기 코드 사이에 포함된 특정 코드 조각입니다. 그리고 최종 ?> 태그.

이러한 태그 외부의 모든 내용은 페이지 콘텐츠로 간주됩니다.
따라서 페이지 시작 부분에 함수가 있고 그 결과 헤더가 전송되고 "경고: 헤더 정보를 수정할 수 없습니다..."라는 메시지가 표시되면 내용과 관련된 일부 정보가 있음이 밝혀집니다. 페이지는 헤더 전에 서버에서 전송됩니다.

이 정보는 무엇이며 이를 찾는 방법은 무엇입니까? 대부분 공백과 빈 줄입니다.

공백이나 빈 줄은 페이지의 주요 내용에 있는 문자로 해석되므로 주요 내용 중 일부가 헤더 앞에 와서 브라우저에 먼저 전송되는 것으로 나타났습니다.

"경고: 헤더 정보를 수정할 수 없습니다..." 메시지에 표시된 파일을 로컬 컴퓨터에 다운로드하고 코드 편집기(NotePad++ 사용)에서 열고 빈 줄과 공백이 있는지 주의 깊게 확인해야 합니다.

그러나 솔루션을 찾는 데 걸리는 시간을 크게 늘릴 수 있는 중요한 기능이 하나 있습니다.
파일에는 빈 줄이나 공백이 포함될 수 없지만 UTF-8 인코딩으로 저장된 경우 파일이 생성된 편집기에서 문서 맨 처음에 불필요한 문자를 삽입할 수 있습니다. 이 문자는 너비가 0인 공백과 동일한 UTF-8 식별자로, 편집기에서는 전혀 표시되지 않을 수 있지만 서버에서는 기본 내용으로 인식되어 제목 앞에 표시됩니다.

이 식별자를 제거하려면 다운로드한 파일을 다음 형식으로 다시 저장해야 합니다. BOM이 없는 UTF-8(BOM이 없는 UTF-8).

NotePad++는 이 작업을 완벽하게 처리합니다.

이러한 작업을 수행하고 서버에서 파일을 업데이트하면 메시지가 사라지고 사이트가 평소대로 작동합니다.

이 오류는 수정하기 쉽습니다.
세션 시작 시 동일한 메시지가 약간 다른 표현으로 나타나는 경우가 많습니다.
경고: 세션 쿠키를 보낼 수 없습니다. 헤더가 이미 전송되었습니다.
경고: 세션 캐시 제한기를 보낼 수 없습니다. 헤더가 이미 전송되었습니다.

바이트 순서 표시
때로는 모든 것을 확인했지만 거기에는 아무것도 없습니다. 편집자를 변경하세요. 다른 프로그램에서 파일을 봅니다. 예를 들어, Windows 메모장은 유니코드 인코딩을 사용할 때 사용자에게 알리지 않고 파일 시작 부분에 바이트 순서 표시 서비스 기호를 추가합니다. 다른 편집기에서 스크립트를 열고 불필요한 문자를 제거하십시오. 그리고 메모장을 다른 편집기로 변경하세요.
또는 BOM 없이 UTF-8 인코딩으로 저장

포럼의 수많은 질문으로 인해 여기서 해야 할 일이 생겼습니다. 중요 사항:
스크립트에 "위에 뭔가가 쓰여져 있습니다" 때문에 이 오류가 나타나지 않습니다. 그리고 PHP가 브라우저에 무언가를 표시한다는 사실에서 비롯됩니다. 반드시 코드일 필요는 없습니다. 그것은 수 에러 메시지. 공백이나 HTML 태그일 수 있습니다. 예 예. 가장 재능 있는 사람들을 위해: 우리는 브라우저가 경험이 없는 사용자에게 표시하는 문자뿐만 아니라 브라우저로 전송되는 모든 문자에 대해 이야기하고 있습니다. HTML 페이지에는 소스 텍스트가 있습니다. 그리고 이것은 많은 사람들이 생각하는 것처럼 그림이 있는 아름다운 글자가 아니라 PHP 스크립트 작업의 결과입니다.

HTTP 헤더 및 HTTP 헤더 필드 이해

HTTP 헤더 HTTP 트랜잭션에 필요한 필수 정보를 다음을 통해 전송합니다. http 프로토콜.

일반적인 HTTP 헤더 형식에는 헤더 필드에 콜론으로 구분된 이름 - 값 쌍이 포함되어 있습니다. 각 이름-값 쌍은 캐리지 리턴(CR) 및 줄 바꿈(LF) 문자 시퀀스로 끝납니다. 각 헤더 끝에 있는 빈 필드는 헤더의 끝을 나타냅니다.

애플리케이션 뒤에 나오는 일반적인 헤더 형식은 다음과 같습니다.

HTTP 헤더 유형

HTTP 메시지 헤더에는 네 가지 유형이 있습니다. 그들은:

  • 일반 헤더
  • 요청 헤더
  • 응답 헤더
  • 엔터티 헤더

일반 헤더

일반 헤더 필드는 요청 및 응답 메시지에 공통적으로 적용됩니다. 헤더 필드는 전송된 메시지에만 적용되며 전송된 엔터티에는 적용되지 않습니다.

일반 헤더의 구조는 다음과 같습니다.

캐시 제어필드는 요청 및 응답 시스템의 모든 캐싱 메커니즘이 따라야 하는 지시어를 지정합니다.

연결필드를 사용하면 발신자가 연결에 필요한 옵션을 지정할 수 있습니다. 연결 헤더의 형식은 다음과 같습니다.

날짜필드는 메시지가 시작된 날짜와 시간을 나타냅니다. HTTP에 지정된 날짜 형식은 다음과 같습니다.

프라그마필드는 요청 및 응답 시스템의 모든 수신자에게 적용할 수 있는 구현 관련 지침을 포함하는 데 도움이 됩니다.

트레일러필드 값은 메시지 트레일러의 헤더 필드 집합이 청크 전송 코딩으로 인코딩되는지 여부를 지정합니다.

전송 인코딩필드는 메시지 본문에 변환 유형이 적용되는지 여부를 나타냅니다.

업그레이드필드를 사용하면 클라이언트가 지원되는 추가 통신 프로토콜을 지정할 수 있습니다. 또한 서버가 추가 프로토콜을 사용하여 프로토콜을 전환할 수도 있습니다.

을 통해필드는 중간 프로토콜을 나타내는 프록시 및 게이트웨이에서 사용되는 필수 필드입니다. 또한 사용자 에이전트와 서버 간의 요청 수신자 및 서버와 클라이언트 간의 응답을 나타냅니다.

경고필드는 메시지에 반영되지 않은 메시지 상태 및 메시지 변환에 대한 추가 정보를 전달합니다.

경고 헤더는 일반적으로 응답과 함께 전송됩니다.

요청 헤더 필드를 사용하면 클라이언트가 요청 정보와 클라이언트 정보를 서버에 추가로 전달할 수 있습니다.

요청 헤더의 구조는 다음과 같습니다.

수용하다필드는 응답에 허용되는 미디어 유형을 지정합니다.

"*"는 범위 내에서 미디어 유형을 그룹화하는 데 사용됩니다.

"*/*"는 모든 미디어 유형을 나타냅니다.

"type/*"은 유형의 모든 하위 유형을 나타냅니다.

Accept-Charset필드는 허용되는 문자 집합을 나타냅니다. 이를 통해 클라이언트는 특수 목적 문자 세트를 이해하여 서버에 이러한 문자 세트로 문서를 나타내도록 신호를 보낼 수 있습니다.

수락-인코딩필드는 Accept와 유사하며 응답이 허용되는 콘텐츠 코딩을 제한합니다.

수락 언어필드는 Accept와 유사하며 선호하는 자연어 세트를 제한합니다.

권한 부여필드는 서버에서 자신을 인증하려는 사용자 에이전트를 위한 것입니다.

예상하다필드는 클라이언트에 필요한 서버 동작을 나타냅니다.

에서필드에는 요청하는 사용자 에이전트를 제어하는 ​​사용자의 이메일 주소가 포함됩니다.

주인필드는 사용자 URI에서 인터넷 호스트와 요청된 리소스 포트 번호를 지정합니다.

If-일치필드는 조건부 메서드를 만드는 데 사용됩니다.

If-수정-이후필드는 조건부 방법을 만드는 데 사용됩니다. 요청된 변형이 지정된 시간 내에 수정되지 않으면 엔터티가 서버에서 반환되지 않습니다.

일치하지 않는 경우필드를 사용하면 트랜잭션 오버헤드를 최소화하면서 캐시 정보를 효율적으로 업데이트할 수 있습니다.

If-범위필드를 사용하면 클라이언트가 누락된 엔터티의 일부를 받을 수 있습니다. 그렇지 않은 경우 클라이언트는 전체 새 엔터티를 보내도록 요청할 수 있습니다.

If-수정되지 않은-이후필드를 사용하면 이 필드에 지정된 시간 이후 수정되지 않은 경우 서버가 요청된 작업을 수행할 수 있습니다.

맥스 포워드필드는 요청 전달 프록시 또는 게이트웨이를 제한하기 위해 TRACE 및 OPTIONS 메소드가 포함된 메커니즘을 제공합니다.

프록시 인증필드를 통해 클라이언트는 보안 프록시를 식별할 수 있습니다.

범위필드는 바이트 시퀀스로 표시되는 HTTP 메시지의 HTTP 엔터티를 지정합니다. HTTP 검색 요청은 GET 메서드를 사용하여 하나 이상의 엔터티 하위 범위를 요청합니다.

추천인필드를 사용하면 클라이언트가 Request-URI가 발견된 리소스의 주소 URI를 지정할 수 있습니다.

T.E.필드는 응답에서 허용할 수 있는 확장 전송 코딩을 나타냅니다. 또한 청크 전송 코딩에서 트레일러 필드를 허용할지 여부를 나타냅니다.

사용자 에이전트필드에는 요청하는 사용자 에이전트에 대한 정보가 포함됩니다.

HTTP 응답 헤더

응답 헤더 필드를 사용하면 서버는 간단한 상태 라인 응답 이외의 응답을 통해 추가 정보를 전달할 수 있습니다.

응답 헤더의 구조는 다음과 같습니다.

허용 범위필드를 사용하면 서버가 리소스 범위 요청의 수락을 나타낼 수 있습니다.

나이필드는 서버가 응답한 이후 보낸 사람의 대략적인 시간을 나타냅니다.

E태그필드는 요청에 대한 엔터티 태그의 현재 값을 제공합니다.

위치필드는 새 리소스 식별을 완료하기 위해 수신자를 요청-URI 이외의 위치로 리디렉션합니다.

프록시 인증필드는 프록시 인증 응답에 필수로 포함됩니다.

재시도 후필드는 서비스를 사용할 수 없을 때 클라이언트가 서비스를 사용할 수 없는 기간을 나타내는 응답으로 사용됩니다.

섬기는 사람필드에는 요청을 처리하기 위해 서버에서 사용하는 소프트웨어에 대한 정보가 포함됩니다.

달라지다필드는 캐시가 응답을 재검증하지 않고 요청 응답을 사용할 수 있는지 여부를 결정하는 요청 필드를 나타냅니다.

WWW-인증필드는 응답 메시지가 승인되지 않은 경우에 사용됩니다.

엔터티 헤더 필드는 엔터티 본문 또는 요청된 리소스에 대한 메타정보를 정의합니다. 엔터티 헤더 형식은 다음과 같습니다.

허용하다필드에는 요청-URI 식별 리소스가 지원하는 메서드 세트가 나열됩니다.

콘텐츠 인코딩필드는 미디어 유형 수정자로 사용됩니다.

내용 언어필드는 엔터티 클라이언트의 자연어를 설명합니다.

콘텐츠 길이필드는 십진수로 표현된 엔터티의 크기를 나타냅니다.

콘텐츠 위치필드는 Requested-URI 이외의 위치에서 액세스할 수 있는 경우 엔터티에 대한 리소스 위치를 제공합니다.

컨텐츠-MD5필드는 엔터티 본문의 MD5 다이제스트를 사용하여 MIC(메시지 무결성 검사)를 제공합니다.

콘텐츠 범위필드는 전체 엔터티 본문의 부분 본문을 적용해야 하는 위치를 지정합니다.

컨텐츠 타입필드는 엔터티 본문의 미디어 유형이 수신자에게 전송되는지 아니면 요청을 보내는 데 GET 메서드가 사용되는지를 나타냅니다.

만료필드는 응답이 무효화되는 날짜/시간을 제공합니다.

마지막 수정필드는 변형이 마지막으로 수정된 날짜와 시간을 나타냅니다.

수신 시 필드 이름이 헤더에 나타나는 순서는 중요하지 않습니다. 일반적으로 일반 헤더가 먼저 배치되고 그 뒤에 엔터티 헤더가 있는 요청 또는 응답 헤더가 배치됩니다.

저작권 공지: 사이트의 사전 서면 허가 없이 이 기사를 복사하거나 번역하지 마십시오.

HTTP 디버거는 모든 브라우저 또는 데스크톱 애플리케이션에서 HTTP 헤더, 쿠키, POST 매개변수, HTTP 콘텐츠 및 CORS 헤더를 캡처하고 분석하는 기능을 제공하는 개발자를 위한 프록시 없는 HTTP 분석기입니다. 멋진 UI와 사용하기 매우 쉽습니다. 프록시가 아니며 네트워크 문제도 없습니다!

이 오류 메시지는 PHP를 사용하기 시작하는 프로그래머가 자주 접하게 됩니다. 이 오류가 발생하는 이유를 이해하면 해결책을 찾는 데 도움이 됩니다.

PHP는 사용자가 묻지도 않고도 웹페이지를 생성하는 많은 작업을 수행합니다. 웹페이지는 헤더와 본문이라는 두 부분으로 구성됩니다.

이 일반적인 PHP 오류는 프로그래머가 헤더를 조작하거나 생성할 때 실수를 할 때 발생합니다. 예는 다음과 같습니다.

경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 12행의 /home/usr1/public_html/includes/theme-header.php에서 (/home/usr1/public_html/sent.php:42에서 시작되는 출력)에 의해 전송되었습니다.

일반적으로 헤더는 자동으로 생성되고 페이지, 서버 및 쿠키에 대한 정보를 포함하므로 걱정할 필요가 없습니다. 헤더의 정보는 중요하지만 일반적으로 사용자에게 표시되지 않습니다. 여기 몇 가지 예가 있어요.

날짜: 2006년 7월 10일 월요일 18:51:59 GMT 서버: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.7g 콘텐츠 인코딩: gzip 콘텐츠 유형: text/html

때때로 프로그래머는 일부 헤더 값을 변경하고 싶어합니다. 예를 들어, PHP가 XML 출력을 생성하는 경우 이를 나타내기 위해 Content-Type을 변경해야 합니다. 또 다른 일반적인 예는 이 문서에 설명된 대로 Location 헤더 요소를 사용하여 사용자의 브라우저를 다른 웹 페이지로 리디렉션하는 것입니다.

헤더는 웹 서버의 응답에서 가장 먼저 와야 하며 본문과 빈 줄 하나로 구분됩니다. 이 오류가 발생하는 이유는 헤더 값을 설정하려고 시도하기 전에 웹 페이지 본문의 일부가 이미 사용자에게 전송되었기 때문입니다. PHP는 많은 것을 단순화시켜 주므로 문제는 평소에 숨어 있을 수도 있습니다. 문제를 찾기 위한 몇 가지 지침은 다음과 같습니다.

  1. 문제를 일으키는 header() 문을 찾으십시오. 오류는 이 줄이나 그 앞에 있어야 합니다.
  2. 이 헤더 문 앞에 출력을 사용자에게 라우팅할 수 있는 지침을 찾으세요. 하나 이상을 찾으면 코드를 변경하여 헤더 명령을 그 앞으로 이동하십시오. 복잡한 조건문은 문제를 복잡하게 만들 수 있지만 문제 해결에 도움이 될 수도 있습니다. 또는 가능한 한 빨리 헤더 값을 결정하고 거기에 설정하는 PHP 스크립트 상단의 조건식을 사용할 수 있습니다.
  3. PHP 시작 및 종료 태그 외부에 공백이 없는지 확인하십시오. 시작 태그 앞의 빈 줄
  4. 파일을 UTF-8 인코딩으로 저장하는 경우 파일이 서명 없이(BOM 없이) 저장되었는지 확인하세요. 서명은 파일 시작 부분에 추가되는 바이트이며, PHP 스크립트가 이 형식으로 저장되면 이 바이트는 페이지 본문 출력의 일부로 인식되므로 문제를 피하기 위해 허용되어서는 안 됩니다. 고려하고 있습니다.


 

다음 내용을 읽어보는 것이 도움이 될 수 있습니다.