현재 위치: > 최신 기사 목록> Header ()가 "헤더가 이미 보낸 헤더"오류를보고하는 이유는 무엇입니까? 원인과 솔루션

Header ()가 "헤더가 이미 보낸 헤더"오류를보고하는 이유는 무엇입니까? 원인과 솔루션

M66 2025-06-05

PHP에서 헤더 () 함수는 원시 HTTP 헤더 정보를 보내는 데 사용됩니다. 일반적으로 리디렉션, 페이지 컨텐츠 유형 설정, 캐시 제어 및 기타 작업에 사용됩니다. 그러나 Header () 함수를 사용할 때는 종종 "헤더가 이미 전송 된 헤더"가 발생합니다. 이 기사는이 문제에 대한 원인과 해결책을 자세히 설명합니다.

"헤더 이미 보낸 헤더"오류는 무엇입니까?

PHP 스크립트에서 Header () 함수를 사용하는 경우 출력 (예 : HTML 컨텐츠, 공백, 라인 브레이크 등) 전에 헤더 정보를 보내야합니다. 이 오류는 PHP 스크립트가 컨텐츠를 보낸 경우 발생합니다 (즉, Header () 함수를 호출하기 전에 모든 데이터가 출력됩니다). 오류 메시지는 일반적으로 "헤더가 이미 전송된다"는 메시지를 표시합니다. 즉, 헤더 메시지가 브라우저로 전송되어 다시 보낼 수 없습니다.

이 오류가 발생하는 이유는 무엇입니까?

"헤더가 이미 전송 된"오류의 일반적인 원인에는 다음이 포함됩니다.

  1. HTML 또는 공간이 미리 출력됩니다 .
    헤더 () 함수를 호출하기 전에 PHP 스크립트에서 HTML 컨텐츠, 공백 또는 신성경이 출력 된 경우이 오류가 트리거됩니다. 특히 PHP 태그 외부의 공간이나 신축성 ( <? php?> )은 쉽게 간과됩니다.

  2. 파일 인코딩 문제 :
    PHP 파일의 인코딩 형식이 UTF-8이고 파일에 BOM (바이트 주문 마크)이 포함 된 경우 파일 상단에 출력 내용이 표시되지 않더라도 BOM은 출력으로 간주되어 헤더 정보가 미리 전송됩니다.

  3. 출력 버퍼 문제 :
    경우에 따라 PHP의 출력 버퍼 설정이 부적절하여 컨텐츠 출력이 사전에 발생할 수 있습니다. 예를 들어, OB_START () 로 출력 버퍼를 시작하지 않으면 PHP는 Header ()을 호출하기 전에 출력의 일부를 보낼 수 있습니다.

"헤더 이미 전송 된"오류를 해결하는 방법은 무엇입니까?

  1. Header () 호출 전에 출력이 없는지 확인하십시오 .
    HTML 출력 또는 공백 문자가 없는지 확인하려면 헤더 () 호출 전에 코드를 확인해야합니다. 공간이나 Newline 조차도이 오류를 던집니다. 가장 좋은 방법은 PHP 스크립트 상단에 헤더 () 함수를 배치하여 출력이 없는지 확인하는 것입니다.

    Error example :

     <html>
    <body>
    <?php
    header("Location: https://m66.net/somepage.php");  // 이 금지령은 오류를보고합니다
    ?>
    </body>
    </html>
    

    Correct example :

     <?php
    header("Location: https://m66.net/somepage.php");  // 올바르게 사용하십시오
    exit();
    ?>
    <html>
    <body>
    </body>
    </html>
    
  2. 인코딩 파일을 확인하고 BOM을 제거하십시오 .
    파일이 UTF-8 인코딩되어 있고 BOM이 포함 된 경우 텍스트 편집기 (예 : Sublime Text, Notepad ++)를 통해 파일을 다시 파일하고 BOM 형식을 선택하지 않고 BOM 형식을 선택할 수 있습니다. 또한 file_get_contents () 또는 fopen ()을 사용하여 파일을 읽을 때 BOM이 포함되어 있지 않은지 확인해야합니다.

  3. 출력 버퍼 활성화 :
    PHP 스크립트의 시작 부분에서 출력 버퍼를 활성화하고 OB_START () 를 통해 버퍼를 시작하여 출력이 있더라도 OB_END_FLUSH () 또는 스크립트 종료를 수동으로 호출 할 때까지 버퍼에 임시로 저장 될 수 있습니다.

    :

     <?php
    ob_start();  // 출력 버퍼링을 시작하십시오
    header("Location: https://m66.net/somepage.php");  // 이 줄은 오류를보고하지 않습니다
    ob_end_flush();  // 출력 버퍼 컨텐츠
    exit();
    ?>
    
  4. 가져온 파일을 확인하십시오 .
    다른 PHP 파일을 포함 시키 거나 소개 하는 데 사용하는 경우 이러한 파일이 출력하기 전에 Header () 함수를 호출하지 않도록해야합니다. 다른 모든 PHP 코드 앞에 헤더 () 호출을 배치하여 출력 컨텐츠에 의해 방해되지 않도록 할 수 있습니다.

  5. 디버깅 도구 :
    headers_sent () 함수를 사용하면 문제를 진단하는 데 도움이 될 수 있습니다. 이 기능은 헤더 메시지가 언제 어디서 전송되었는지 알려줍니다. 오류가 어디에 있는지 알아낼 수 있습니다.

    :