PHP/PHP 에러 해결 모음

session_start() 에러 - headers already sent 원인과 해결법 (PHP 에러 해결 모음)

backend.log 2025. 4. 8. 15:47
728x90
반응형

✅ PHP에서 session_start() 에러 해결법 — headers already sent by 문제

PHP에서 세션을 시작하려고 session_start()를 넣었는데, 이런 에러가 뜬 적 있나요?

Warning: session_start(): Cannot send session cache limiter - headers already sent by (output started at /index.php:1)

처음 보면 헷갈릴 수 있는 이 에러,
사실은 아주 단순한 원리 때문에 발생합니다.


🧨 왜 이런 에러가 날까?

session_start()는 내부적으로 헤더(header)를 사용합니다.
PHP에서는 출력이 시작된 이후에는 헤더 관련 처리를 할 수 없어요.

즉, session_start() 이전에 출력이 있었다면 이 에러가 발생하게 됩니다.


❗ 이런 경우에 에러가 납니다

1. PHP 시작 태그 전에 공백/빈 줄이 있는 경우

[공백]

<?php
  session_start(); // ❌ 에러 발생

2. session_start() 전에 echo가 있는 경우

<?php
  echo "로그인 페이지입니다."; // ❌ 출력 발생
  session_start(); // 에러

3. include한 파일에 출력 코드가 있는 경우

// config.php
<?php
  echo "설정 로드 완료"; // ❌

<?php
  include 'config.php';
  session_start(); // 에러 발생!

🛠 해결 방법

출력 전에 session_start()를 먼저 실행해야 합니다.

예시 (정상 작동)

<?php
  session_start();
  echo "안녕하세요!";

✅ 해결 체크리스트

  • <?php 태그 전에 빈 줄, 공백 없음
  • session_start() 전에 echo, print, var_dump() 등 출력 없음
  • include/require 파일 내부에 출력 코드 없음
  • 파일 인코딩이 UTF-8 (BOM 없음) 으로 저장되어 있음

※ 특히 UTF-8 with BOM은 눈에 안 보이게 출력이 발생해서 에러가 납니다.
🔧 VSCode에서는 우측 하단 [UTF-8 with BOM] → 클릭 → UTF-8 로 변경 가능!


✏️ 정리

  • session_start()는 출력 전에만 사용 가능
  • 출력이 먼저 되면 header 관련 함수는 모두 막힘
  • 항상 코드 최상단에서 session_start()를 시작하는 습관!

다음 글에서는 include 경로 문제로 인한 Failed opening required 에러를 다룰 예정입니다.
좋아요 👍 / 댓글 💬 / 구독 💻 은 개발자에게 큰 힘이 됩니다!

💡 PHP 에러 시리즈 전체 보기

728x90
반응형