-2

ページにすでに「出力」がある場合に、Header:Location を持つユーザーを別のページにリダイレクトしようとすると、PHP はメッセージを表示します: headers already sent.

関数を作成し、その関数を必要な場所 (ページの下部であっても) に呼び出すことは良い解決策ですか?

ありがとう!

例:

function redirectMe($location){
    header('Location:'.$location);
}

//HTML

//Redirect user:
redirectMe('http://www.google.com');
4

3 に答える 3

2

いいえ、関数が呼び出される時点ですでに HTML を出力しているため、それは機能しません。

リダイレクトを使用する場合は、ANYTHING がユーザーに出力される前に行う必要があります。何かを出力する前に変数を確認してください。それで終わりか、ユーザーをリダイレクトしないことを決定してから、すべての HTML を出力します。

編集:しかし、まったく恐ろしい方法で、リダイレクト/滞在する条件を確認する方法がわからない場合は、すべてのHTMLを文字列に入れ、ページの最後でそれをエコーアウトすることができます-しかし大げさです、それを行うことは、正しい条件をチェックしてそこから進むよりもはるかに多くの作業になります.

于 2013-08-31T12:03:57.207 に答える
2

良い解決策は、使用することob_start()ですob_end_clean()

ob_start();
// all your PHP/HTML codes go there.
$output = ob_get_contents();
ob_end_clean();

詳細http://php.net/manual/en/function.ob-start.php </p>

于 2013-08-31T12:04:19.750 に答える
2

リダイレクト用のヘッダー関数の実行前にブラウザーに何かが出力されている場合、headers already sent エラーが発生します。ユーザーに出力を表示する必要がない場合は、ページの開始時に ob_start() 関数を使用して、ブラウザに送信される前の出力をバッファリングし、ヘッダーの後に ob_flush を使用できます。ページの流れに合わせてご利用いただけます

于 2013-08-31T12:05:41.177 に答える