2011-11-02 1 views
1

나는 최근에 include 파일의 함수 정의들 사이에 떠돌아 다니는 문자를 가지고 있으며 얼마 동안 그것을 알아 채지 못했다.PHP : 하나의 서버가 텍스트 뒤에 헤더를 받아 들인다. 다른 하나는 그렇지 않다.

내 개발 서버에서 이것은 명백한 문제가 아니 었습니다. 문자가 인쇄되어 즉시 배너로 덮어 씁니다. 나는 그것을 결코 보지 못했다. 머리글 ('Location : xxx')에 올 때마다 정상적으로 실행됩니다.

하지만 프로덕션 서버에서 리다이렉트가 발생할 때마다 즉시 "헤더가 이미 전송되었습니다"라는 오류가 발생하기 시작했습니다. 결국이 메시지는 결국 나를 처음에 길잃은 문자로 알려줍니다. (비록 그것을 발견하는 데 약간의 시간이 걸렸지 만)

제 질문은 왜 개발 서버에서 작동 했습니까? .INI 또는 다른 설정으로 인해이 동작의 차이가 발생할 수 있습니까? 일종의 기본 출력 버퍼링을위한 버퍼가 있습니까? 아니면이 오류보고 불일치입니까? 두 환경 사이에 작은 구성 차이가 있다고 확신하지만이 동작과 관련하여 원격으로 아무 것도 사용자 지정하지 않았습니다.

개발은 Linux의 Apache 2.2.16에서 php 5.3.3을 실행 중입니다. 프로덕션은 FreeBSD에서 Apache 2.2.20 하에서 php 5.3.6을 실행 중입니다.

답변

1

은 개발 서버에서 출력 버퍼링이 활성화 된 것처럼 들립니다. (php.ini : output_buffering)는 "off"또는 버퍼링 할 바이트 수이어야합니다.

+0

감사합니다. 개발 서버에는 4096이 있었으며 프로덕션 서버에는 가치가 없었습니다. – Timberline

0

"헤더를 이미 보냈습니다"라는 경고는 단지 경고입니다. php.ini의 error_reporting 지시어로이를 억제 할 수 있습니다. 로그 파일을 확인하십시오. 경고를 받아야합니다.

+0

좋은 제안에 감사드립니다. 이 경우 4K 출력 버퍼링을 위해 기본적으로 구성 되었기 때문에 개발 서버에서 실제로 발생하지 않는 오류가 발생했습니다. – Timberline

관련 문제