PHP 닫기 Tag가 newline을 먹어버리는 이유
- Wednesday, March 4, 2009, 16:00
- Articles, Featured, PHP
- Add a comment
PHP는 PHP파일 안에서 <? 와 ?> 사이의 코드를 PHP 코드로 인식하여 처리합니다. 그 외의 것들은 무시하고 그냥 출력해버리죠. 그런데 ?> 태그 뒤에 아무런 문자열이 없는 경우 newline이 적용되지 않습니다. 예를 들면 아래의 코드 같은 경우입니다.
코드 1

위 코드 1을 실행하면 다음과 같은 결과가 나옵니다.
결과 1 코드 1의 결과

코드 1에서 3번째 줄에는 분명 <?php for ( ) ?>이 있습니다만 결과 값에서는 다른 줄과 다르게 newline 이 적용되지 않았습니다. 단 <?php 앞에 있는 빈칸은 그대로 출력됩니다. 그래서 </element> 는 <element>보다 들여쓰기가 돼있습니다. <?php } ?> 의 앞 공간만큼 들어간 것이죠.
대신 ?> 태그 뒤에 어떠한 문자열( space 포함 )이라도 입력을 하면 newline이 적용됩니다. 결과 2처럼 말이죠.

이렇게 적용되는 이유는 “Headers already sent” 에러 때문입니다. Cookie 나 그 외 여러 가지 header를 전송해야 하는 경우 전상적인 헤더 외의 어떠한 문자(공백,newline 포함)가 전송되면 header 전송이 완료된 것으로 인식하기 때문에 추가로 header를 전송하려 하면 “Headers already sent” 라는 에러가 발생합니다. 이런 이유 때문에 ?> 태그 뒤에 아무런 문자열도 없다면 PHP는 newline 조차 전송하지 않습니다.


