2016-10-29 2 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"); 

} 

는 이제,

경고 사용자를 등록하지만, 다음과 같은 오류가 발생합니다 : 헤더 정보를 수정할 수 없습니다 - 헤더가 이미

내가 어떤 공백 또는 아무것도 없다 보내 .. I 이 문제는 리디렉션으로 인해 발생합니다.

내 딜레마는 ob_start를 사용하여 읽은 게시물이 좋은 아이디어이지만 ob_start가 나쁜 아이디어라는 일부 게시물을 발견했습니다. ob_start는 오류를 제거하지만 문제는 여전히 존재하기 때문입니다.

그래서 나는 혼란스러워하고 이것을 해결할 정확한 방법을 모르겠습니다.

+1

()'α- 함수. 그러므로'RedirectToUrl()'함수를 호출하기 전에 출력해야한다. 파일이 무엇이든 관계없이 모든 출력이이를 수행합니다. 'ob_start()'는 문제를 해결할 수있는 완벽한 방법입니다. 출력 후에 헤더를 발행 할 수있게 해 주므로 문제의 해결을 위해 잘 작동합니다. – junkfoodjunkie

+0

@junkfoodjunkie이 코드는 session_start 이후에 호출해야합니까? 코드에 직접 추가 할 수 있습니까? – Case

+1

'ob_start()'는'start_session()'의 앞이나 뒤에 행해질 수 있습니다 - 중요하지 않습니다. – junkfoodjunkie

답변

1

기능이 set_message() 인 경우 매개 변수가 전달되면 헤더가 이미 전송되었습니다. 리디렉션하기 전에는 아무것도 인쇄하지 마십시오. 리디렉션 후 일부 메시지를 인쇄하려면 리디렉션 전에 일부 키를 $_SESSION에 저장하고 키가 있으면 인덱스 페이지에 출력 할 수 있습니다.

또한 exit()에 연결할 수 없습니다. header() 앞에 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']); 
}