Warning: Cannot modify header information - headers already sent by... 정보
Warning: Cannot modify header information - headers already sent by...본문
A서버 : CentOS 5.x, Apache 2.xx, PHP 5.x, UTF-8
B서버 : CentOS 5.x, Apache 2.xx, PHP 5.x, UTF-8
뒤 xx 버전과 환경 설정은 약간의 차이가 있습니다.
A서버에서 그누로 만든 사이트(에러 없이 정상)를 B서버로 폴더체 옮겼습니다.
B서버로 옮긴 사이트를 보니 그누게시판에서는 문제가 없는데, html로 구성된 페이지(head.php,
tail.php 등을 인클루드하는 페이지)에서 warning이 뜨네요..
참고로 둘다 php.ini에
session.bug_compat_42 = 1
session.bug_compat_warn = 1
로 되어 있습니다.
Warning: Cannot modify header information - headers already sent by
이런 에러가 떠서 게시판을 검색해 보고 여기저기 검색해 보니 해결책은 ob_start()를
사용하라고 하는데 해결이 안되네요...
파일 하나를 예를 들면
Warning: Cannot modify header information - headers already sent by (output started at /..../gnu/html/green_index.php:1) in /home/.../gnu/common.php on line 9
우선 에러가 나는 green_index.php 파일의 상단 부분의 코드는
<?
include_once("./_common.php");
include_once("../_head.php");
?>
<p class="title"><img src="../images/common/01_tit01.gif" alt="" /></p>
<table style="margin-left:10px; width:100%;">
--- 이하 생략
위 _common.php 파일의 코드는
<?
$g4_path = ".."; // common.php 의 상대 경로
include_once("$g4_path/common.php");
?>
common.php 파일의 코드는
<?
/*******************************************************************************
** 공통 변수, 상수, 코드
*******************************************************************************/
error_reporting(E_ALL ^ E_NOTICE);
// 보안설정이나 프레임이 달라도 쿠키가 통하도록 설정
header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');
입니다.
문제가 무었인지... header를 안쓸수도 오류 출력을 안할수도 없고...
common.php 에 header 함수 위에 headers_sent()를 사용했더니 true로 떨어지네요..
위 코드처럼 분명 header를 중복 호출하거나 html 공백 등이 없는데 원인을 찾기 어렵네요..
해결방법이나 문제점을 알려주시면 감사하겠습니다.
댓글 전체

_head.php를 봐야 할듯합니다.
head.sub.php 이전에 출력테그가 있는지 확인해보세요
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once("$g4[path]/head.php");
?>
이렇게 되어 있고, head.sub.php 이전에 인클루드 하는 부분은 common.php와 common.lib.php 두개 파일인데 두 파일 모두 원본 수정한 적이 없고, html도 없습니다.
코드를 봤을때는 문제 없어 보이는데 원인을 찾을 수가 없네요.. 게시판에서도 동일한 파일을 인클루드해서, 문제가 생기면 게시판쪽도 생겨야하는데, html 형식으로만 넣은 페이지들만 warning이 뜬다면 common.php라던지 head.php 등등에서 문제가 있는게 아니고 불러오는 파일들에 문제가 있는 건 아닌지 도대체 알 수가 없네요..
다시 파일을 만들어 보면서 체크해 봐야할거 같네요 ㅠ.ㅠ

에서
common.php를 include할 때
파일 첫 줄 첫 칸부터 시작하세요.
header 앞에 php 선언하는 문자도 빼버리고 싶더군요 ㅡㅡ;

인코딩 문제가 아닐까 해서 다시한번 UTF-8(non BOM)으로 다시 인코딩 해봐도 마찬가지 였습니다.
아는 방법 다 동원해 보고 여기저기 뒤져가며 해봐도 안되서 질문 드렸던 것이라...
기존 파일의 코드를 복사하여 새파일에 붙여 넣고 파일 이름 똑같이 해서 업로드하면 해결된 것을 보면 알수 없는 파일의 특성값이 있었던 것 같습니다.
뭔지 정확히 알 수 없지만 동일하게 다운받은 파일을 업로드하여 적용한 것 중 일부 파일만 그런 현상이 일어났는데, 오류나는 파일의 코드를 복사하여 새로 파일을 만들었더니 해결되었습니다.
원인을 아시는 분이 계시다면 속 시원히 답변 받고 싶은 심정입니다
다른 분들도 감사한 답변 주셨는데, 제가 작업한 내용과 같아서 채택합니다 ^^

새문서 만들어서 저장후 올려서 문제 해결을 했습니다.
EM에디터로
save as... ->
인코딩 utf-8
BOM 체크해제
리턴 메쏘드 NoChange 로..해보심이.. 아니면 리턴메쏘드 좀 바꿔보시구요 ^^
저는 그렇게 해결했습니다.
아직까지 원인은 모르지만 그냥 파일 새로 만들었습니다. ^^