現在の位置: ホーム> 最新記事一覧> Headers_Sent関数をHeader関数と組み合わせて使用するためのベストプラクティスは何ですか?

Headers_Sent関数をHeader関数と組み合わせて使用するためのベストプラクティスは何ですか?

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>()`函数则可以检测ヘッダー情報是否已经发送。これらの2つの機能を合理的に組み合わせる,能够有效避免因重复发送ヘッダー情報导致的错误,从そして提升程序的健壮性和用户体验。

</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またはWhitespace文字が出力されている場合)、 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>

これにより、プログラムの例外を引き起こすためにヘッダー情報が送信された後、ヘッダー()の呼び出しを避けることができます。

3.組み合わせた使用のためのベストプラクティス

  • 何かを出力しないように、事前にheader()を呼び出します
    PHPがコンテンツを出力すると、HTTPヘッダーが自動的に送信されます。したがって、呼び出される前に、 Header()にエコー、印刷、またはHTML出力がないことを確認してください。

  • Headers_Sent()を使用して検出には、ヘッダー情報の繰り返しの送信を防ぐ<br> 複雑なプログラムまたはテンプレートシステムでは、出力順序を完全に制御することは困難である可能性があり、 Headers_Sent()を使用して確認することが特に重要です。

  • ヘッダーが送信されていることがわかったら、代替手段を取得<br> たとえば、JavaScriptを使用して、プログラムのクラッシュを避けるためにジャンプまたは手動リンクを提供します。

  • ExitまたはDieで使用<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>