2011-12-08 2 views
0

나는 고전 교향곡 플래시 메시지 구현이 있습니다PHP 헤더() 함수 휴대

$_SESSION['flash'] = "This is a flash message"; 
header('location: index.php'); 

그것은 두 개의 서로 다른 서버에서 잘 작동하지만, 세 번째, 호스팅 서버, LAMP 스택,의에 이상한 행동을 가지고 어느 구성에 대해 자세히 알지 못합니다. 세 번째 서버에서 스크립트를 실행하면 먼저 헤더가 전송되었음을 경고하는 메시지가 나타납니다 (그러나 작동하는 다른 서버에서는 아무 것도 출력하지 않았습니다). 그런 다음 리디렉션 이벤트를 다시 트리거하면, 하이퍼 링크를 사용하면 index.php 파일에 렌더링 된 메시지가 표시됩니다. 리디렉션을 위해 JavaScript를 사용하여 "이식성"을 만드는 방법을 알고 있지만이 동작의 원인이 무엇인지 궁금합니다. PHP 또는 Apache 모듈에 대한 서버 구성이 의심 스럽습니다. 당신의 손에 감사드립니다!

+1

이 정말있다 excerpted 코드와는 관계가 없습니다. 이 코드가 실행되는 코드의 일부는 세 번째 서버에서 다릅니다. 헤더가 이미 전송 된 상태를 확인하십시오. 줄 번호가 있어야합니다. – ceejayoz

+0

** 정확히 **이 두 줄 위에 쓰여진 것은 무엇입니까? – ManseUK

+0

새 서버에 스크립트를 넣기 전에 파일을 어떻게 변경 했습니까? 질문에 넣은 블록 앞에 오는 코드를 보여 주시겠습니까? – Ryan

답변

3

자바는 휴대용 솔루션이 아니지만, 최소한 휴대용 솔루션은
입니다.

알 수없는 출력은 BOM과 같은 일부 공백으로 인해 발생할 수 있습니다.
또는 headers_sent

+0

자바 스크립트 사용에 대한 의견을 듣고 싶지는 않지만 내 게시물의 범위는 아닙니다. 공백도 없습니다. 다시 말하지만 코드는 세 서버 모두에서 동일합니다. –

+0

세 가지 대답이 무엇인지 설명하고 있습니다. 지금까지 어떤 시도를 했습니까? 자바 스크립트에 대한 귀하의 의견을 (문제 - 주제)이 문제를 해결하는 데 도움이되지 않습니다. PHP 설정을 질문에 포함시켜야합니다. – ajreal

+0

덕분에, 그게 유용합니다 –

1

일부 콘텐츠를 출력하면 "헤더가 이미 전송되었습니다"라는 오류가 발생합니다. 공백 포함.

나가는 응답 (사용자를 리디렉션해야하지만 수행하지 않은 페이지)을 잡고 내용을 검사하십시오.

"헤더를 이미 보냈습니다"라는 오류 메시지 만 표시됩니다. 다른 것을 본다면 수정하십시오.

<?php 또는 초과 후 ?> 태그 앞에 과도한 공백이 있는지 확인하십시오. 가장 많이 발생하는 경우는 나중에 하나입니다 (?> 뒤에 2 줄의 줄 바꿈이 있습니다. 한 줄의 줄 바꿈은 파서에서 무시됩니다).

"버그 가능성"을 제거하려면 닫기 태그를 완전히 제거하면됩니다. 필요하지 않습니다.

+0

나는 매우 낮은 품질 때문에이 답변을 기쁘게 생각합니다. 그것은 부적절하거나 단순히 잘못된 진술로 구성됩니다. 따라서 오류보고 수준을 높이면 특정 질문의 맥락에서 이해가되지 않습니다. '$ a [] = 'b';'명령문은 오류를 발생시키지 않습니다. 그리고 전체 "session_start 닫는 헤더입니다"대화가 완전히 잘못되었습니다 - 이제는 문서에서 그런 이상한 성명을 찾을 수 있습니다. –

+0

@ Col.Shrapnel 당신은 막을 수 없어, 그렇지? 좋아, 나는 표준을 충족시키기 위해 답을 편집 할 것이다. –

+0

@ Col.Shrapnel 행복하세요? –

1

하지만이 문제의 원인은 무엇입니까?

이것은 재미있는 질문입니다.
사실, 오류 메시지는 오류가 발생한 정확한 행 번호를 지적했습니다. 그 파일을 열고 발견해야합니다.

대부분의 PHP 사용자는 오류 메시지를 과소 평가하지만 대부분의 경우 이러한 메시지에는 필수 정보가 포함되어 있으며 종종 문제의 유일한 키입니다.

항상 나를 혼란스럽게합니다. 거의 아무도 자신의 질문에 대한 오류 메시지를 읽거나 적어도 게시하지 않는 이유는 무엇입니까?

작동하는 다른 서버의 경우 출력 버퍼링이 있습니다.

0

세 번째 서버의 출력 버퍼링이 활성화되어 있습니까?

버퍼링이 활성화되어 있고 많은 양을 출력하지 않았다면 PHP는 헤더가 전송되었는지 확인하여 조용히 대처할 수 있습니다. 출력 전에.버퍼링이 비활성화되면이를 수정할 수 없습니다.

그것은/라인 출력이 시작 원인이되는 파일을 정확하게 알려해야

- 가서는 아무것도 출력하지 있어요 확인 - 등 공백 외부 태그, 오류 메시지 print 또는 echo을 ...