현재 위치: > 최신 기사 목록> Header ()를 사용하기 전에 출력을 피하는 팁

Header ()를 사용하기 전에 출력을 피하는 팁

M66 2025-05-28

PHP 프로그래밍에서 헤더 () 함수는 원시 HTTP 헤더 정보를 보내는 데 사용됩니다. 일반적인 응용 프로그램 시나리오에는 사용자 리디렉션, 캐시 제어 헤더 설정 또는 컨텐츠 유형 수정이 포함됩니다. 그러나 Header () 함수 사용에는 중요한 제한이 있습니다. Header ()를 호출하기 전에 출력은 없습니다. 그렇지 않으면 PHP는 헤더 정보를 올바르게 보내지 않으며 오류가 발생할 수 있습니다.

콘텐츠 출력을 피해야하는 이유는 무엇입니까?

  1. HTTP 프로토콜에 대한 요구 사항
    HTTP 프로토콜은 헤더 정보가 응답 본문 전에 전송되어야한다고 규정합니다. 따라서 Header () 함수를 사용할 때는 브라우저에 출력이 없도록해야합니다. 모든 출력 (HTML, 공백, 라인 브레이크 또는 오류 메시지 등)으로 인해 PHP는 응답 본문의 일부를 보내므로 후속 헤더 정보가 전송되는 것을 방지합니다. 다시 말해, 출력 전에 Header ()를 호출해야합니다.

  2. "헤더 정보를 수정할 수 없습니다"오류 <br> Header () 함수를 호출하기 전에 출력이 있으면 PHP는 오류가 발생합니다. "경고 : 헤더 정보를 수정할 수 없습니다 - 헤더는 이미 보낸 헤더"입니다. " 이는 PHP가 응답 내용을 보내기 시작했으며 헤더 정보를 더 이상 수정하거나 보낼 수 없음을 의미합니다. 이 오류는 일반적으로 웹 사이트의 정상적인 기능, 특히 리디렉션 및 로그인 확인과 같은 시나리오에서 방해합니다.

  3. 캐시 제어
    PHP가 헤더 정보를 보내면 Header ()를 사용하여 캐시, 유형 또는 리디렉션을 제어 할 수 있습니다. 출력이있는 경우 HTTP 헤더를 예상대로 설정할 수 없으므로 바람직하지 않은 캐시 또는 페이지 리디렉션이 제대로 수행되지 않을 수 있습니다.

이 문제를 피하는 방법?

  1. 빈 출력이 없는지 확인하십시오 <br> PHP 파일의 시작과 끝에서 공백 문자 나 줄 중단을 피하십시오. 일반적 으로이 문제는 PHP 파일의 시작 또는 끝에서, 특히 < ? PHP 태그. 파일의 시작과 끝에 공백이나 선 파단이 없는지 확인하십시오.

    예를 들어 다음 코드는 문제를 만듭니다.

     <?php
    // 실수:앞에는 빈 캐릭터가 있습니다
    header("Location: http://m66.net");
    exit;
    ?>
    

    올바른 방법은 다음과 같습니다.

     <?php
    header("Location: http://m66.net");
    exit;
    ?>
    
  2. OB_START ()OB_END_FLUSH () 사용
    PHP는 실제 응답을 보내기 전에 모든 출력 컨텐츠를 캡처 할 수있는 출력 버퍼링 메커니즘을 제공합니다. OB_START ()를 사용하여 PHP는 OB_END_FLUSH ()가 호출 될 때까지 버퍼링 출력을 시작합니다. 이를 통해 출력하기 전에 헤더 () 함수를 호출 할 수 있습니다.

    예:

     <?php
    ob_start(); // 출력 버퍼링을 시작하십시오
    header("Location: http://m66.net"); // 이제 사용하기에 안전합니다 header
    ob_end_flush(); // 버퍼를 지우고 출력을 보냅니다
    exit;
    ?>
    
  3. 오류 메시지 출력을 피하십시오 <br> 개발 중에 PHP는 일반적으로 오류가 발생하면 경고 또는 오류 메시지를 표시합니다. 오류 메시지가 출력되면 헤더 전송에 영향을 미칩니다. 이를 피하려면 php.ini 파일을 구성하거나 ini_set () 함수를 사용하여 오류 출력을 비활성화 할 수 있습니다.

    php.ini 구성 :

     display_errors = Off
    

    코드에서 ini_set ()를 사용하십시오.

     <?php
    ini_set('display_errors', 0); // 禁止실수输出
    header("Location: http://m66.net");
    exit;
    ?>
    
  4. 타사 라이브러리 또는 프레임 워크 <br>를 확인하십시오 일부 타사 라이브러리 또는 프레임 워크는 요청 처리 중에 컨텐츠를 자동으로 출력하거나 디버깅을 수행 할 수 있습니다. 현재이 라이브러리의 문서 또는 소스 코드를 확인하여 Header ()를 호출하기 전에 콘텐츠를 출력하지 않도록 할 수 있습니다. 일부 프레임 워크를 사용하면이 문제를 피하기 위해 로그 레벨 또는 출력 레벨을 구성 할 수 있습니다.

  5. 디버그 출력 <br> 개발 단계에서 디버그 해야하는 경우 출력 버퍼링에 OB_START ()를 일시적으로 사용하거나 디버깅 후 모든 출력을 댓글을 달아 출력 전에 헤더 정보가 전송되도록 할 수 있습니다.

요약

PHP의 Header () 함수를 사용하는 경우 호출되기 전에 출력이 없는지 확인하십시오. 공백, 라인 브레이크, HTML 코드 또는 오류 메시지 등으로 인해 PHP가 헤더 정보를 올바르게 보내지 못하게 할 수 있습니다. 출력 버퍼를 사용하고 출력 오류 정보를 피하고 코드 구조를 신중하게 예약 함으로써이 문제를 효과적으로 피할 수 있으므로 Header () 기능이 정상적으로 작동하여 웹 사이트의 올바른 리디렉션, 캐시 제어 및 기타 기능을 달성 할 수 있습니다.