워드프레스 사용자들뿐만 아니라 다른 프로그램 사용자들도 자주 겪는 Headers already sent … 오류는 주로 플러그인 파일과 관련하여 발생한다. 이 오류가 발생할 경우에는 다음의 경우 중 어느 하나에 속한다:
- 해당 플러그인 파일의 첫 문장은 <?php 로 시작할텐데, 이 <?php 앞에 공백을 두면 이 오류가 발생할 수 있다.
- 해당 플러그인 파일의 마지막 문장은 ?> 로 끝날텐데, 이 ?> 뒤에 공백을 남기면 이 오류가 발생할 수 있다.
- 해당 플러그인 파일을 저장할 때 노트패드나 편집기에서 utf-8 인코딩 형식으로 저장하면 이런 결과가 발생할 수 있다.
위 사유들 중에서 utf-8로 저장한다고 해서 무조건 이 오류가 발생하는 것은 아니다. 대부분의 편집기는 파일을 utf-8 형식으로 저장할 때 그 파일이 유니코드로 인코딩되었음을 알리는 표식(Unicode Signature, 혹은 BOM이라고 함. utf-8 문서의 처음 2 bytes에 추가되는 0xFF 0xFE를 말함)을 문서의 맨 처음에 보이지 않게 추가한다. 노트패드 역시 이 표식을 추가하여 저장한다. 그 결과, 파일을 열어보면 이 표식은 보이지 않지만 실제로는 <?php 앞에 이 표식이 위치해 있는 셈이다.
이런 이유에서, 노트패드나 기타 편집기로 플러그인 파일을 utf-8로 저장하여 실행해 보면 어김없이 Headers already sent … 오류가 발생하게 된다. 이 오류가 발생하는 좀더 근본적인 이유는 PHP가 이 utf-8 BOM을 무시하지 않고 하나의 문자로 읽기 때문이다. 이 문제를 해결하려면 파일을 utf-8 형식으로 저장할 때 utf-8 BOM을 추가하지 말아야 한다. 그러나 노트패드는 파일을 utf-8 형식으로 저장할 때 무조건 BOM을 추가하므로 노트패드로는 해결 불가능하다.
그러나, 좀더 고급인 편집기에서는 “Unicode Signature(BOM) 추가 여부”를 옵션으로 설정할 수 있다. 주로 파일저장과 관련한 옵션에 이 설정항목이 있다. 대부분의 경우라면 기본값으로 Unicode Signature를 추가하도록 설정되어 있으므로 이를 변경해야 한다. 그리고 나서 파일을 utf-8 인코딩 형식으로 저장해야 한다.
나같은 경우에는 주로 EmEditor를 편집기로 사용하고 있는데, 이 편집기의 경우 Tools > Properties for All Configurations > File > Saving … > Add a Unicode Signature(BOM)의 체크를 해제하면 된다.
인코딩 문제였군요. 감사.ㅋ
알고 나면 쉬운데 모르면 고생하는 오류이죠ㅎㅎ