PHPでは、 Header()関数を使用して、リダイレクトのリダイレクト、Cookieの設定、コンテンツタイプの変更などの元のHTTPヘッダー情報を送信します。ただし、HTTPヘッダー情報は、実際の出力(HTML、ECHO、印刷など)またはエラーがスローされる前に送信する必要があります。これは、出力が始まると、PHPがHTTPヘッダーを自動的に送信するためです。
Header()を呼び出すときにエラーを回避するために、 headers_sent()関数を使用して、ヘッダーが送信されたかどうかを検出できます。
Headers_Sent()は、HTTPヘッダー情報がブラウザに送信されたかどうかを確認するために、PHPによって提供される組み込み関数です。その基本的な使用法は次のとおりです。
if (!headers_sent()) {
header('Location: https://m66.net/some-page');
exit;
}
ヘッダーがまだ送信されていない場合、 headers_sent()はfalseを返し、 header()を安全に呼び出すことができることを示します。真実の場合、それはヘッダーが送信されたことを意味し、 Header()を呼び出すときにエラーが報告されます。
headers_sent()は、ヘッダー出力の位置(ファイルと行番号)を取得するために2つのパラメーターを受け入れることもできます。
if (headers_sent($file, $line)) {
echo "HTTP 頭はすでにそこにあります $file 最初のドキュメント $line 行の送信。";
} else {
header('Location: https://m66.net/some-other-page');
exit;
}
この方法は、デバッグに特に適しており、事前に出力するコードの場所を見つけるのに役立ちます。
リダイレクトを行う前に、出力がないことを確認する必要があります。
if (!headers_sent()) {
header('Location: https://m66.net/login');
exit;
} else {
echo "リダイレクトできません,すでに出力があるからです。";
}
同様に、 SetCookie()はHTTPヘッダーに依存しているため、次のことを確認してください。
if (!headers_sent()) {
setcookie('user', 'JohnDoe', time() + 3600, '/');
} else {
echo "設定できません cookie,ヘッダーが送信されたためです。";
}
ヘッダーの送信エラーが発生した場合は、スクリプトの先頭に出力バッファリングを有効にすることを検討してください。
ob_start();
この方法で、すべての出力は、スクリプトが終了するか、 OB_END_FLUSH()が呼び出されるまですぐにブラウザに送信するのではなく、最初にバッファーに入力され、ヘッダー情報を安全に送信する時間を与えます。