PHP開発では、ページリダイレクトにheader()関数を使用することは一般的な慣行です。例えば:
header("Location: http://m66.net/anotherpage.php");
exit;
上記のコードは、ユーザーをhttp://m66.net/anotherpage.phpページにリダイレクトします。リダイレクトは非常にシンプルで一般的な操作ですが、特にHeader()関数を使用する場合、空白のページに遭遇することもあります。この記事では、ページが空白である理由を説明し、トラブルシューティングとソリューションを提供します。
HTML出力の前に、 Header()関数を呼び出す必要があります。 HTMLコンテンツ(スペース、ラインブレイク、エラーメッセージなど)がHeader()関数を呼び出す前に出力された場合、PHPはエラーをスローし、リダイレクトは有効になり、最終的にページが空白になる可能性があります。
解決:
Header()関数に以前に出力がないことを確認してください。ファイルの開始とHeader()呼び出しの間にスペース、ラインの破損、またはHTMLコンテンツがあるかどうかを確認できます。
予期しない出力を避けるために、ファイルの先頭にスペースやニューラインがないことが最善です。ファイルのBOM(バイトオーダーマーカー)を調べることで、ファイルが正しくエンコードされているかどうかを確認して、余分な空白文字が含まれていないことを確認できます。
手順のトラブルシューティング:
PHPファイルを開き、 Header()関数の前に出力がないことを確認します。
必要に応じて、 ob_start()を使用して出力バッファリングを有効にして、早期出力を避けます。
<?php
ob_start(); // 出力バッファリングをオンにします
header("Location: http://m66.net/anotherpage.php");
exit;
ob_end_flush(); // 出力バッファーをきれいにし、コンテンツを出力します
?>
Header()関数はすぐにスクリプトの実行を終了せず、 exit()またはdie()関数がその後呼び出された場合にのみ、スクリプトは実行を停止します。したがって、 header()を呼び出した後にexit()を呼び出さない場合、PHPは後続のコードを実行し続ける可能性があり、ページに空白またはエラーが発生します。
解決:
Header()関数の直後にExit()を呼び出して、スクリプトが実行を終了し、他のコンテンツが出力されないことを確認します。
header("Location: http://m66.net/anotherpage.php");
exit; // スクリプトが実行を終了することを確認してください
ヘッダー情報がheaders_sent()関数を介して送信されたかどうかを確認できます。 BrowserがHeader()関数が呼び出されたときにヘッダー情報を受信した場合、PHPはヘッダー情報を再度送信できず、リダイレクト障害になります。
解決:
header()関数を呼び出す前に、 headers_sent()関数を使用して、ヘッダー情報が送信されているかどうかを確認します。
ヘッダーが送信されている場合、 ob_start()を使用して出力をバッファーできます。
if (!headers_sent()) {
header("Location: http://m66.net/anotherpage.php");
exit;
} else {
echo "リダイレクトできません,ヘッダー情報が送信されました";
}
ページブランクは、PHPエラーによって引き起こされる場合があります。デフォルトでは、PHPはエラーメッセージを表示するのではなく、ブランクページを直接出力する場合があります。エラーレポートをオンにすることで、潜在的な問題があるかどうかを確認できます。
解決:
開発中、PHPエラーレポートを有効にして、潜在的なエラーを検出および修正します。
error_reporting(E_ALL); // すべてのエラーレポートをオンにします
ini_set('display_errors', 1); // ページにエラーを表示します
Header()関数を使用してリダイレクトする場合、正しいHTTPステータスコードが使用されていることを確認してください。デフォルトのリダイレクトステータスコードは302(一時リダイレクト)です。リダイレクトが永続的な場合は、301ステータスコードを使用する必要があります。
header("Location: http://m66.net/anotherpage.php", true, 301); // 永続的なリダイレクト
exit;
上記のトラブルシューティング手順を通じて、 header()関数を使用してリダイレクトするときにページブランクの問題を発見して解決できます。重要な検査ポイントは次のとおりです。
Header()呼び出しの前に出力がないことを確認してください。
exit()を呼び出して、スクリプトが実行を終了することを確認します。
ヘッダーメッセージが送信されているかどうかを確認してください。
エラーレポートをオンにして、他のエラーメッセージがあるかどうかを確認します。
これらの措置により、ページブランクの問題を回避し、リダイレクトを適切に機能させることができます。
関連タグ:
header