short open tag 는 <?php 로 php가 시작되는것을 <? 만으로도 사용할 수 있게 해주는 설정입니다.

 

php 5.5 이상에서 아마 short open tag의 설정이 off가 기본설정으로 알고 있습니다.

 

 

 

예전에는 이 설정의 기본 설정이 On으로 알고 있었고, 많은 코딩들이 <? 로 시작하였던 것 같은데,

어느새 short open tag 의 기본설정은 off로 되고 최근 코딩 추세를 보면 <?php 로 시작하는 것을 볼 수 있습니다.


 

https://stackoverflow.com/questions/22554753/php-5-5-short-open-tag-on-security-hole

위의 내용을 보면 ASP나 XML 코드와 겹치기 때문에 기본설정에서 제외했다고 서술합니다만..(길어서 자세히 읽어보지 않았습니다.)

php만 사용하는 환경이라면 short open tag의 설정을 on으로 바꿔도 아무런 이슈가 없을 까요?

제가 궁금한 것은 이슈가 있었기 때문에 기본 설정이 off로 되었을까요?

  • profile
    비 표준적인 방법이기 때문에 off로 되어있습니다
    편의를 위해 제공되었기 때문에 기본설정에는 적합하지 않겟죠
  • profile profile
    갑자기 5.5 이후 비 표준으로 정해진 이유가 궁금했습니다.
    답변 감사합니다.
  • profile

    asp 태그 <% %>나 스크립트 태그 <script language="php"></script>는 어차피 아무도 사용하지 않았으니 논외로 하고요... 짧은 태그 <? ?>는 XML에서 <?xml version="1.0" encoding="UTF-8"?> 이런 내용을 의무적으로 맨 앞에 붙이라는 표준을 만들어 버리는 바람에 사장되었습니다.

     

    XML을 출력하는 프로그램이라면 일단 저 내용을 맨 앞에 붙인 후 중간중간 PHP를 삽입해서 내용을 출력하도록 만드는 것이 일반적인데, short open tag가 켜져 있으면 맨 앞의 <?xml 부분에서 문법 오류가 나버리거든요.

     

    물론 그것도 XML이 HTML을 대체할 수 있을 거라고 착각하던 시절에나 먹히던 논리입니다. 요즘은 XML보다는 JSON을 더 많이 쓰는 추세이기도 하거니와, XML을 출력할 때도 SimpleXML 같은 함수를 사용하지 수동으로 태그를 작성하지는 않거든요. 따라서 웬만하면 short open tag를 켜놔도 상관은 없습니다.

     

    문제는 PHP에서 기본값을 off로 바꿔놓는 바람에 저게 꺼져 있는 서버가 상당히 많다는 점입니다. 그래서 현실적으로는 불특정 다수에게 판매하거나 배포하는 프로그램에서 <? ?> 태그는 더이상 쓸 수가 없습니다.

     

    또한 XE처럼 클래스와 템플릿이 깔끔하게 구분되는 CMS나 프레임워크에서는 변수를 출력하거나 루프를 돌리는 문법이 따로 있기 때문에 <? ?>는 고사하고 <?php ?>마저 쓸 일이 거의 없습니다. 클래스나 함수를 선언하는 파일에서는 맨 위에서 <?php 태그를 열고 그냥 안 닫는 것이 표준이 되었지요. 애초에 쓸 일이 없으니 몇 글자 더 길다고 귀찮아하는 사람도 거의 없습니다. 그래서 더이상 short open tag에 신경을 쓰질 않습니다. 그냥 조용히 묻혀버렸어요.

  • profile profile
    라이믹스나 XE는 괜찮은데, 옛날 웹 소스나 그누보드 빌더중 일부가 short open tag 가 필수인 것들이 있어서 궁금했습니다.
    명쾌한 답변 감사합니다.
  • profile profile
    그런 데서는 XML을 쓸 일도 없으니 그냥 서버에서 short open tag 켜놓고 써야죠 ㅎㅎ