PHPプログラミングでは、 Header()関数は通常、特にページリダイレクトを実行する場合、生のHTTPヘッダーを送信するために使用されます。一般的な使用法には、ページのリダイレクト、コンテンツタイプの設定などが含まれます。ヘッダー()関数は強力ですが、実際の開発では、開発者はしばしばセットHTTPヘッダーが効果的でないという問題に遭遇します。この記事では、PHPのHeader()関数の設定を確認してデバッグして、正しく有効になることを確認します。
ヘッダー()関数は、何かを出力する前に呼び出す必要があります。ヘッド()を呼び出す前に、スクリプトが何か(スペース、ラインブレイク、またはHTMLタグなどを含む何か(スペース、ラインブレイク、またはHTMLタグなど)が出力されている場合、PHPはHTTPヘッダーを正しく設定しません。
事前にコンテンツの出力を避けるために、次の方法で出力バッファーがオンになっているかどうかを確認できます。
ob_start(); // 出力バッファーをオンにします
// 他のコード
header("Location: http://m66.net"); // リダイレクト
ob_end_flush(); // 出力バッファコンテンツと閉じます
ob_start()は出力バッファーを有効にするため、すべての出力コンテンツが一時的にバッファに保存され、スクリプトが実行されるまでブラウザに出力されません。
コンテンツが出力されているかどうかわからない場合は、 headers_sent()関数を使用して、コンテンツが出力されているかどうかを確認できます。この関数は、出力が発生したかどうかを示すブール値を返します。
if (headers_sent($file, $line)) {
echo "Headers already sent in $file on line $line";
} else {
header("Location: http://m66.net"); // リダイレクト
}
headers_sent()がtrueを返す場合、PHPがHeader()を呼び出す前にコンテンツを出力し、HTTPヘッダー設定が失敗することを意味します。出力ファイルとライン番号は、開発者が問題の根本原因を見つけるのに役立ちます。
Header()関数に渡されたパラメーターが正しく、予想どおりであることを確認してください。たとえば、ページのリダイレクトが実行されている場合、URLは有効で正しくフォーマットする必要があります。 URLが相対パスを使用している場合は、現在のページのパスに一致することを確認してください。以下に示すように、外部ドメイン名が含まれている場合は、ドメイン名が正しいことを確認してください。
header("Location: http://m66.net/somepage.php");
exit(); // 使用 exit() スクリプトの実行を停止します,确保リダイレクト生效
一部のPHP構成は、特に特定のサーバー構成において、 Header()関数の動作に影響する場合があります。たとえば、 output_bufferingの設定は、HTTPヘッダーの送信に影響を与える可能性があります。 php.iniの関連する設定を確認して、 Header()が適切に動作するのを防ぐ構成アイテムがあるかどうかを確認できます。
output_buffering = On
output_bufferingがオンに設定されている場合、PHPはすべての出力コンテンツをバッファーに保存してから、スクリプトが実行されるまで応答を送信します。
PHPエラーログを有効にすると、Header()関数の実行を正しくデバッグできます。エラーログをチェックすることにより、ヘッドに関連する警告やエラーがあるかどうかを確認できます。
php.iniでのエラーログの有効化:
log_errors = On
error_log = /path/to/error.log
ロギングが有効になっている場合、PHPは実行中にエラーを記録し、 Header()を呼び出すときに開発者が問題があるかどうかを理解するのに役立ちます。
Header()関数が呼び出されると、ブラウザが受け取った応答ヘッダー情報は、ブラウザの開発者ツールを介して表示できます。 Chromeブラウザでは、 F12を押して開発者ツールを開き、[ネットワーク]タブに切り替え、ページを更新した後、送信されたHTTPリクエストと応答ヘッダーを表示できます。
ページが予想どおりにコンテンツタイプをリダイレクトまたは設定しない場合、応答ヘッダーに設定したヘッダー()情報が含まれているかどうかを確認できます。そうでない場合、PHPスクリプトがヘッダーを正しく送信していないことを意味します。
場合によっては、 header()を呼び出した後、 exit()またはdie()関数を使用してスクリプトの実行を停止して、リダイレクトまたは他のヘッダー操作がすぐに有効になることを確認する必要があります。
header("Location: http://m66.net");
exit();
Exit()が使用されない場合、スクリプトは引き続き実行され、その後の出力が以前に設定されたHTTPヘッダーを上書きすることがあります。
PHPでHeader()関数をチェックしてデバッグするとき、出力バッファーのチェック、 Headers_Sent()関数を使用して、関数パラメーターが正しいかどうか、PHP設定の構成、ブラウザー応答ヘッダーの表示を使用して、複数の角度からトラブルシューティングできます。これらの方法により、 Header()関数設定が効果的でないという問題は効果的に解決し、PHPスクリプトが予想どおりに機能するようにします。