현재 위치: > 최신 기사 목록> 헤더 기능과 함께 headers_sent 함수를 사용하기위한 모범 사례는 무엇입니까?

헤더 기능과 함께 headers_sent 함수를 사용하기위한 모범 사례는 무엇입니까?

gitbox 2025-08-19
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 코드 의이 부분은 기사의 내용과 관련이 없습니다.,사전 코드 블록을 보여줍니다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-variable">$now</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"현재 시간:<span class="hljs-subst">$now</span></span></span><span>\n";
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

존재하다PHP개발 중,작동하다HTTP응답 헤더는 매우 일반적인 요구 사항입니다。`</span><span><span class="hljs-title function_ invoke__">header</span></span><span>()`기능을 통해 원본을 보낼 수 있습니다HTTP헤더 정보,그리고`</span><span><span class="hljs-title function_ invoke__">headers_sent</span></span><span>()`函数则可以检测헤더 정보是否已经发送。이 두 기능을 합리적으로 결합합니다,能够有效避免因重复发送헤더 정보导致的错误,从그리고提升程序的健壮性和用户体验。

</span><span><span class="hljs-comment">## 1. `header()`기능 소개</span></span><span>

`</span><span><span class="hljs-title function_ invoke__">header</span></span><span>()`원본을 보내는 데 사용됩니다HTTP머리。예를 들어,점프를 설정하십시오、컨텐츠 유형을 지정합니다、제어 캐시 등:

```php
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: http://example.com'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: application/json'</span></span><span>);
</span></span>

그러나 HTTP 헤더가 전송 된 경우 (예를 들어 일부 HTML 또는 공백 문자가 출력 된 경우) Calling Header ()는 "헤더 정보를 수정할 수 없음 - 헤더가 이미 전송 된 헤더"의 오류를 트리거합니다.

2. headers_sent () 함수의 함수

Headers_Sent ()는 HTTP 헤더가 클라이언트로 전송되었는지 여부를 감지하는 데 사용됩니다. 일반적인 사용 :

 <span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">headers_sent</span></span><span>()) {
    </span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: http://example.com'</span></span><span>);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Headers already sent, cannot redirect.'</span></span><span>;
}
</span></span>

프로그램 예외를 유발하기 위해 헤더 정보가 전송 된 후 Header () 호출을 피할 수 있습니다.

3. 결합 된 용도를위한 모범 사례

  • 출력을 피하려면 Header ()를 미리 호출하십시오
    PHP가 컨텐츠를 출력하면 HTTP 헤더가 자동으로 전송됩니다. 따라서 Header ()가 호출되기 전에 Echo, Print 또는 HTML 출력이 없는지 확인하십시오.

  • 헤더 정보의 반복 전송을 방지하기 위해 감지를 위해 headers_sent () 를 사용하십시오 . <br> 복잡한 프로그램 또는 템플릿 시스템에서는 출력 순서를 완전히 제어하기가 어려울 수 있으며 Headers_Sent ()를 사용하여 확인하는 것이 특히 중요합니다.

  • 헤더가 전송되었다는 것을 알게되면 대안을 받으십시오 <br> 예를 들어, JavaScript를 사용하여 프로그램 충돌을 피하기 위해 수동 링크를 점프하거나 제공하십시오.

  • 출구 또는 다이와 함께 사용하십시오 <br> 리디렉션을 보내면 후속 코드 실행을 방지하기 위해 스크립트를 즉시 종료해야합니다.

4. 샘플 코드

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 어딘가에서 출력되었을 수 있다고 가정하십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"방문에 오신 것을 환영합니다!"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">headers_sent</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$line</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: http://example.com'</span></span><span>);
    </span><span><span class="hljs-keyword">exit</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;script&gt;window.location.href='http://example.com';&lt;/script&gt;"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;p&gt;페이지 점프가 실패했습니다,클릭하십시오 &lt;a href='http://example.com'&gt;여기&lt;/a&gt;。&lt;/p&gt;"</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Headers already sent in <span class="hljs-subst">$file</span></span></span><span> on line </span><span><span class="hljs-subst">$line</span></span><span>.");
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

5. 요약

Header ()Headers_Sent () 의 조합은 HTTP 헤더 작업의 보안 및 유연성을 크게 향상시킬 수 있습니다. 특히 대규모 프로젝트 나 프레임 워크 에서이 탐지 메커니즘은 출력 순서의 오류로 인한 치명적인 오류를 피할 수 있으므로 코드를보다 강력하고 유지 관리하기가 더 쉽습니다. 우수한 출력 제어 습관을 개발하고 헤드 탐지 사용에 대한 인식은 PHP 개발에서 중요한 모범 사례입니다.

 <span></span>