프로그래밍/PHP

session_start() 에러 해결책 두번째

가카리 2013. 11. 24. 20:35
반응형

session_start()

Document URL : http://kaiserinlee.thoth.kr/1335548

_PHP | Posted on March 19th, 2010 at 19:15 by Kaiserin李 | Modify

무시무시한 세션스타트 -_-;

 

웹서버를 구축하면서 모두들 세션변수를 사용할텐데, 여기에서 난 또 백만번 헤맸다.

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at *.html:1) in *.html on line 2

 

이런 무서운 경고가 -ㅁ-!!!!

 

분명히 처음엔 문제가 없었는데, utf-8로 변환시킨 후 자꾸만 이 경고문이 뜨는 것이었다.

session_start()는 제일 먼저 불려와져야 하기 때문에, 이 경고문이 뜨면 다른 모든 세션변수들에서 문제가 생겨 아예 페이지 자체가 돌아가지지 않았다.

 

아무리 저 경고문으로 검색을 해보아도,

session_start() 함수는 아웃풋이 되기전에 불려야되기 때문에 잘 살펴보라느니, 폴더 권한이 문제라느니 다 이런 경우였다 ㅠ_ㅠ

 

하지만 난 분명 다른 아웃풋(주석문이나 탭 혹은 공백도 포함될 수 있다고 한다.)이 출력되기 전에 이 함수를 불러왔고,

혹시나 싶어서 최상단에다가 <?php session_start();?>로 시작해보기도 했고

php.ini에서 세션변수가 어디로 저장되는지를 확인한 후, 폴더내에서 확인해보기까지 했는데 분명 세션변수는 잘 등록되고 있었다 -ㅠ-

허나 계속되는 저 경고문 -_- 도대체 무엇이 문제였던가 !

 

그래서 난 구글에게 물었다. 묻고 찾고 묻고 찾고 묻고 찾고 ...

그러던 중 어떤 사람의 글이 눈에 띄었다 .

 

http://kasolutions.wordpress.com/2009/07/14/fix-warning-session_start-function-session-start-cannot-send-session-cache-limiter-headers-already-sent/

 

이 사람도 나와 같은 경우였던 것이다 ~

난 따로 개발서버에 모니터가 달려있지 않은지라, vi와 울트라에디트로만 확인해봤는데 첫머리에 이상한 글자도 없었고,

HEX 모드로 확인해보았지만 이상한 글자같은건 붙여져있지 않았다.

게다가 울트라 에디트로는 UTF-8 BOM없음 형식으로 변환하려해도 그 변환형식이 없어보였다 -_-;

 

저 필자가 노트패드플러스로 쓴다해서 변환설정을 봤더니 빙고 -ㅁ-!

거기에 있었다 !

UTF-8(BOM없음)형식으로 변환하는 것이 말이다

 

어떤 사람은 plain ANSI 형식으로 변환해야된다고 하는 사람도 있었지만, UTF-8설정으로 해야되는 나로써는, 그렇게 할 수 없었고,

여튼 이 형식으로 변환해서 성공했다.

그치만 이 파일이 include 되는 모든 파일이 다 이 형식으로 변환되어야 하는데, 하나라도 아니면 똑같은 경고문이 -_-;;;;;

 

사실 이 형식이 html 태그가 잘 안먹히는 경우도 있다고 들었다 ; 직접 본적은 없지만, 앞으로 계속 이 설정으로 개발해야되는데 태그가 안먹힌다면 큰일 ;

하지만 일단 이렇게 진행해 나가기로 했다. 혹시 다른 누군가 나와 같은 경우가 있다면, 이 글이 꼭 도움이 되었으면 좋겠다 ^^

 

* 간혹 @session_start(); 로 하면 해결된다는 글이 있는데, 앞에 @를 붙이는 것은 근본적인 해결책이 아니다.

이는 경고문을 무시하라는 것이지 절대 !!!! 해결되는 것이 아니다 !

 

** 정리

- session_start(); 전에 출력문이 있으면 안된다.

- 그래도 안된다면 세션변수가 저장되는 폴더 권한을 777로 주었는지 확인해보자.

- 그래도 안된다면 UTF-8(BOM없음) 형식으로 저장해보자.

- 그래도 안된다면 모든 파일을 이 형식으로 저장하자.

- 그래도 안된다면 php.ini 에서 default-charset utf-8 로 설정해보라.

  난 이것도 안해줘서 경고문이 떴었다 -_ㅠ

- 설정은 모두 통일하자 !

[출처] session_start()|작성자 청산아

반응형