php Short Open Tag에 대해서

유호경·2026년 8월 3일

PHP Short Open Tag란?

PHP 파일에서는 아래와 같이 <?php 태그를 열어 PHP 코드와 문법을 사용할 수 있다.

<?php
echo "Hello";

너무 기본적인 문법이지만, PHP에는 short_open_tag라는 설정이 존재한다.

이 설정에 따라 <?(Short Open Tag)를 PHP 코드의 시작으로 인식할지 여부가 결정된다.

Short Open Tag란?

PHP에는 코드를 시작하는 태그가 두 가지 있다.

1. 표준 태그(Standard Open Tag)

<?php
echo "Hello";

항상 사용할 수 있는 PHP의 표준 태그이다.

2. Short Open Tag

<?
echo "Hello";

<? 형태의 태그는 Short Open Tag라고 부른다.

하지만 이 문법은 short_open_tag 설정이 On일 때만 사용할 수 있다.

short_open_tag 설정 확인

php.ini 파일에서 다음과 같이 설정되어 있다.

short_open_tag=On

또는

short_open_tag=Off
  • On : <?php와 <? 모두 사용 가능
  • Off : <?php만 사용 가능

실제로 겪었던 문제

최근 CodeIgniter 3 프로젝트를 로컬 환경에서 실행하는데 아래와 같은 Parse Error가 발생했다.

ParseError: syntax error, unexpected ...

실서버에서는 정상적으로 동작했기 때문에 처음에는 PHP 버전이나 내장 서버(php -S)의 문제라고 생각했다.

하지만 원인은 의외로 단순했다.

뷰 파일에 아래와 같이 <? 태그가 두 군데 사용되고 있었고,

<?
if ($isLogin) {
    ...
}

로컬 환경의 PHP는 short_open_tag=Off 상태였기 때문에 <?를 PHP 코드가 아닌 일반 문자열처럼 해석하면서 문법 오류가 발생한 것이다.

해당 부분을 모두 표준 태그로 변경하니 문제가 바로 해결되었다.

<?php
if ($isLogin) {
    ...
}

내장 서버(php -S)가 원인일까?

결론부터 말하면 아니다.

내장 서버가 <?를 인식하지 못하는 것이 아니라, 내장 서버가 사용하는 PHP의 설정(php.ini)이 short_open_tag=Off였던 것이다.

즉,

  • 실서버 : short_open_tag=On → 정상 동작
  • 로컬 : short_open_tag=Off → Parse Error 발생

처럼 환경 설정의 차이 때문에 동일한 코드가 다르게 동작할 수 있다.

그렇다면 <?=는 왜 동작할까?

많은 사람들이 헷갈리는 부분인데,

<?= $title ?>

는 Short Open Tag와는 별개의 문법이다.

PHP 5.4부터는 <?= 태그가 항상 활성화되어 있기 때문에 short_open_tag 설정과 상관없이 사용할 수 있다.

즉,

short_open_tag=Off

이어도 아래 코드는 정상적으로 실행된다.

<?= $title ?>

하지만

<?
echo $title;

는 short_open_tag=On일 때만 사용할 수 있다.

결론

현재는 대부분의 프로젝트에서 <? 대신 항상 <?php를 사용하는 것을 권장한다.

그 이유는 다음과 같다.

  • PHP 설정에 영향을 받지 않는다.
  • 어떤 서버에서도 동일하게 동작한다.
  • 협업 시 환경 차이로 인한 오류를 예방할 수 있다.
  • PHP 공식에서도 표준 태그 사용을 권장한다.

기존 레거시 프로젝트를 유지보수한다면 <?가 남아있는 경우가 종종 있다. 새로운 코드를 작성하거나 리팩터링할 때는 <?php로 통일해 두는 것이 가장 안전한 방법이다.

profile
하면된다.

0개의 댓글