2010-04-09 6 views
-1

헤더의 태그를 사용하여 페이지를 리디렉션하고 싶지만 작동하지 않습니다.페이지를 리디렉션하는 PHP의 헤더

+0

아래의 해결 방법이 효과가있는 경우 답변으로 선택하십시오. 그렇지 않으면 작동하지 않는 코드의 일부를 포함 시키십시오. 도움이 될 것입니다. – zapping

+2

귀하의 질문은 구체적이고 구체적이며 명확하게 작성되도록 SO 요구 사항을 충족시키지 못합니다.'헤더 태그 사용 '- 정확히 "태그"는 무엇을 사용 했습니까? '작동하지 않는다 '- 당신은 정확히 어떤 결과를 얻었습니까? –

+1

@Shrapnel .. U r an etraordinary Crtic ... :) –

답변

0

당신이 필요합니다

header('Location: http://google.com'); 

머리글 전에 약간의 PHP 출력을 가지고 있기 때문에 그것은 작동하지 않을 수는 헤더 기능을하기 전에 출력 빈 공간이나 문자 또는 에코가 없는지 확인합니다. 일반적으로 오류가 발생하고 "index.php의 1 행 페이지에서 이미 전송 된 헤더"와 같은 여분의 공간이있는 곳을 찾을 수 있습니다.

2

"headers already sent"오류가 발생하는 가장 일반적인 이유입니다. 따라서 해결해야 할 두 가지 문제가 있습니다.

  1. 질문에 오류 메시지 텍스트가 없기 때문에이 텍스트가 없다고 생각할 수 있습니다. 그러나 프로그래머는 발생한 모든 오류 메시지를 볼 필요가 있습니다. 개발자 환경이나 제품의 피크 로그에서 display_errors 설정을 on으로 설정해야합니다. 또한 error_reporting() 레벨을 E_ALL로 설정해야합니다.

  2. 응용 디자인. 응용 프로그램은 비즈니스 로직과 프리젠 테이션 로직의 두 부분으로 나누어 져야합니다. 첫 번째는 사용자, 데이터베이스 등에서 데이터를 가져 오는 것입니다. 늦은 사람은 수집 된 데이터를 표시합니다. 프리젠 테이션 로직 부분이 실행되기 전에 브라우저에 단일 바이트를 보내지 않아야합니다. 이 경우 오류가 발생하지 않습니다.

하나의 예외는 BOM - Byte Order Mark이며 일부 편집자가 자동으로 파일에 넣는 기호입니다. 그냥 "BOM없이 저장"기능을 사용하십시오. 페이지의 상단에

4

추가 (모든 HTML이나 PHP 전) 다음

<?php 
header('Location: http://stackoverflow.com/users/300204/zaf'); 
exit(); 
?> 

그 리디렉션 경우에 당신은 당신이하지 않은 것을 확인해야합니다 (멋진 프로그래머의 홈페이지에) 이 header() 함수를 사용하기 전에 내용을 출력하십시오. header() 함수는 ANY 내용이 사용자에게 전송되기 전에 호출되어야합니다.

0

일부 지적했듯이 콘텐츠 전에 헤더를 출력해야합니다. 이것을 수행하는 이상적인 방법은 비즈니스 로직과 프리젠 테이션 로직을 서로 다른 부분으로 분리하는 것입니다.하지만 이렇게하지 않는 레거시 코드가 붙어있는 경우가 있습니다.

이 경우 PHP의 output control 함수가 유용 할 수 있습니다. ob_start() 및 ob_end_flush()를 사용하여 출력을 캡처 한 다음 끝에 출력하십시오. 이렇게하면 코드에서 header()를 어느 정도 사용할 수 있습니다 (예 :

<?php 

function doSomeStuff() { 
    echo 'look, outputting stuff here'; 
    header('Location: /'); 
} 

doSomeStuff(); 
?> 

위의 코드는 이미 전송 된 헤더에 대한 오류를 표시하지만 다음 코드가 작동합니다. 이 경우

<?php 
function doSomeStuff() { 
    echo 'look, outputting stuff here'; 
    header('Location: /'); 
} 

ob_start(); 
doSomeStuff(); 
ob_end_flush(); 
?> 

는 에코의 출력()()은 ob_end_flush까지 전송되지 않으므로 헤더() 호출은 올바르게 작동한다. 이 접근법은 비즈니스 로직과 프리젠 테이션 로직을 적절하게 분리하지 않는 레거시 코드를 래핑하는 데 사용될 수 있습니다.

관련 문제