PHP/PHP 에러 해결 모음

PHP에서 ‘headers already sent’ 에러가 나는 이유와 해결 방법

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

✅ PHP에서 'headers already sent' 에러가 나는 이유와 해결 방법

웹 개발 중 아래와 같은 에러 메시지를 본 적 있으신가요?

Warning: Cannot modify header information - headers already sent by...

처음 보면 "대체 뭘 보냈다는 거지?" 싶은데요 😵
이번 글에서는 이 에러의 원인과 해결 방법을 정리해보겠습니다.


🔍 에러 메시지 예시

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:1) in /var/www/html/index.php on line 10

🧨 에러의 핵심 원인

PHP는 header() 함수 등을 사용할 때, 출력이 발생하기 전이어야 정상적으로 동작합니다.
이미 HTML, echo, print 등으로 출력이 발생하면 그 이후에는 header를 보낼 수 없게 됩니다.

예시:

<?php
echo "Hello World!";
header("Location: /login.php");

위 코드처럼 출력(echo)이 먼저 발생하면 에러가 발생합니다.


⚠️ 자주 하는 실수 TOP 3

  1. 파일 맨 앞에 공백/빈 줄이 있는 경우
    // ❌ 이런 코드
    [공백]
    
    <?php
    header("Location: login.php");
  2. include 또는 require한 파일에 출력이 있는 경우
    // config.php
    <?php
    echo "설정 파일 불러오기"; // ❌
    
    require 'config.php';
    header("Location: dashboard.php"); // 여기서 에러!
  3. UTF-8 with BOM 인코딩 문제파일이 UTF-8 with BOM 형식이면, PHP는 BOM(Byte Order Mark)을 출력으로 인식합니다.
  4. ✅ 해결: UTF-8 (BOM 없음) 으로 저장
    (VSCode, Sublime Text 등에서 인코딩 변경 가능)

✅ 올바른 사용 예시

<?php
header("Location: login.php");
exit;

exit;를 통해 이후 코드 실행을 막는 것이 안전합니다.


🛠 에러 해결 체크리스트 ✅

  • ☑️ <?php 전에 공백/줄 없음
  • ☑️ 인코딩이 UTF-8 (No BOM)
  • ☑️ echo, print, var_dump 등이 header 이전에 없음
  • ☑️ include된 파일에서 출력이 발생하지 않음

✏️ 마무리

'headers already sent' 에러는 사소한 실수로 자주 발생하지만,
원리만 이해하면 금방 해결할 수 있습니다.

👉 항상 header 관련 코드는 출력 전에!
👉 exit; 까지 깔끔하게 써주는 습관까지!

 

앞으로도 자주 겪는 PHP 에러와 실무 팁을 공유할 예정입니다.
좋아요, 댓글, 구독은 개발자의 힘이 됩니다 💪

728x90
반응형