2016-10-29 4 views
0

私はこの問題について約25ページを読んだことがありますが、本当の明快さはありません。何よりも混乱。ヘッダーリダイレクト競合の混乱

私はリダイレクトするとき、私は私のコードで、その後

function RedirectToURL($url){ 
    return header("Location: {$url}"); 
    exit(); 
} 

の下に使用したリダイレクト機能を持っています。

if (register($email, $username, $password)) { 

    set_message('<div class="alert-success" data-closable> 
    Account Registered.</div>'); 

    RedirectToURL("index.php"); 

} 

今では、ユーザを登録しますが、次のエラーが発生し、

警告:ヘッダー情報を変更することはできません - ヘッダが既に私は..私は何の空白か何かを持っていない

を送りましたリダイレクトによってこの問題が発生することがあります。

私のジレンマは、ob_startを使用して読んだ記事が良いアイデアだということですが、ob_startが悪い考えだと言う投稿もあります。 ob_startはエラーを削除しますが、問題は引き続き存在するためです。

私は混乱しており、これを解決する正しい方法が不明です。

+1

()' -function。したがって、 'RedirectToUrl()'関数を呼び出す前に出力しています。 ANY出力は、ファイルの種類にかかわらず、これを行います。 'ob_start()'は問題を解決するための完全に正常な方法です。出力後にヘッダーを発行することができます。 – junkfoodjunkie

+0

@junkfoodjunkie私はsession_startの後でこれを呼び出す必要がありますか、それともコードに直接追加できますか? – Case

+1

'ob_start()'は 'start_session()'の前後で実行できます。問題はありません。 – junkfoodjunkie

答えて

1

ファンクションset_message()がパラメータを渡した場合、ヘッダはすでに送信されています。リダイレクトする前に何も印刷しないでください。リダイレクト後に何らかのメッセージを出力したい場合は、リダイレクトする前に何らかのキーで$_SESSIONに格納し、そのキーがあればインデックスページに出力することができます。

また、exit()にアクセスできません。 の前にreturnを削除してください。

function RedirectToURL($url) 
{ 
    header("Location: {$url}"); 
    exit(); 
} 

if (register($email, $username, $password)) { 
    set_message('<div class="alert-success" data-closable>Account Registered.</div>'); 

    RedirectToURL("index.php"); 
} 

function set_message($message) 
{ 
    $_SESSION['redirect_message'] = $message; 
} 

あなたのインデックスページ上のいくつかのブロック:あなたは `set_message経由で何かを出力している

if (array_key_exists('redirect_message', $_SESSION)) { 
    echo $_SESSION['redirect_message']; 
    unset($_SESSION['redirect_message']); 
}