2011-10-28 1 views
3
<? 
echo "lalala"; 
header("Location: http://www.google.com/"); 

일반 PHP 파일에 넣고 mod-php (PHP 버전 5.3.2-1ubuntu4.10)가있는 표준 apache2 서버로 전달하면 Google로 리디렉션됩니다.콘텐츠가 이미 에코 된 후이 헤더 위치가 작동하지 않는 이유는 무엇입니까?

<? 
echo "lalala"; 
flush(); 
header("Location: http://www.google.com/"); 

이 코드는 분명히 작동하는 리디렉션을 생성하지 않습니다.

제 질문은 어떻게 처리되는 첫 번째 코드이며, 왜 작동하는지입니다. 나는 이런 일이 불가능했을 때를 기억하기 때문에. mod-php 또는 apache는 전체 요청을 버퍼링하고 내용 앞에 헤더를 정렬 할 정도로 지능적입니까?

그리고 : 나는 출력을 수동으로 세척하지 않도록 할 경우

나는이에 의존 할 수 있나요? 내 응용 프로그램을 훨씬 쉽게 만들 수 있기 때문에 ...

답변

2

헤더 기능은 HTTP 응답에 HTTP 공통 헤더를 추가합니다. 따라서 리디렉션이 설정되고 브라우저에서 출력을 표시하기 전에 302 메시지를 가져옵니다.

플러시 명령은 이미 호출 된 지점에서 준비된 HTTP 응답을 보내도록 명령합니다. 두 번째 코드가 헤더를 설정하지 않는 이유입니다 (ANY 출력을 보내기 전에 설정해야합니다).

그리고, PHP해야 할 때까지 출력하지 단일 건 : 스크립트는 (에러가 구문 분석을 정지하는 경우에도)

  • 스크립트와 어딘가에 출력을 보내도록 설정 처리

    • 플러시()
    • 마지막

    , 출력 제어부에서이를 확인 http://www.php.net/manual/en/intro.outcontrol.php