⊗ppPmHpRHP 400 of 447 menu

PHP에서 HTTP 응답 헤더 문제

HTTP 규칙에 따르면 먼저 HTTP 헤더가 전송된 후 HTTP 응답 본문이 전송됩니다. 이로 인해 PHP의 header 함수를 사용할 때 몇 가지 특별한 점이 있습니다.

문제는 이 함수를 호출하기 전에 화면에 어떤 출력이 있으면, 그것이 응답 본문의 시작으로 해석된다는 점입니다. 이 경우 header 함수를 호출하면 PHP에서 headers already sent라는 경고 메시지가 나타납니다. 이때 헤더는 전송될 수도 있습니다. 심지어 오류가 출력되지 않을 수도 있습니다(PHP 설정에 따라 다름). 하지만 대부분의 경우 이는 로컬 환경에서만 그럴 뿐, 사이트를 인터넷에 배포하면 모든 것이 망가질 것입니다.

화면 출력이란 어떤 텍스트든 의미합니다. 예를 들어 다음과 같습니다:

text <?php header('Content-Type: text/html'); ?>

또는 빈 줄:

<?php header('Content-Type: text/html'); ?>

또는 공백:

<?php header('Content-Type: text/html'); ?>

또는 태그:

<div> <?php header('Content-Type: text/html'); ?> </div>

또는 echo를 통한 출력:

<?php echo 'abc'; header('Content-Type: text/html'); ?>

또는 var_dump를 통한 출력:

<?php $str = 'abc'; var_dump($str); header('Content-Type: text/html'); ?>

심지어 PHP 경고도 화면 출력이 됩니다. 다음 예제에서는 의도적으로 존재하지 않는 변수에 접근하여 경고를 출력하게 합니다:

<?php $text += 1; header('Content-Type: text/html'); ?>

PHP 태그의 분리도 화면 출력을 발생시킵니다:

<?php echo 'abc'; ?> <?php header('Content-Type: text/html'); ?>

의도적으로 header 함수 앞에 화면 출력을 만들어 보세요. 발생하는 오류 메시지를 살펴보세요.

다음 코드에서 발생한 오류를 수정하세요:

<!DOCTYPE html> <html> <head> <?php header('Content-Type: text/html'); ?> </head> <body> text <body> <html>
한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부