Q&A

getenv("HTTP_USER_AGENT")

$_SERVER['HTTP_USER_AGENT']

 

어제 안드로이와 아이폰을 구분해서 출력해줄 것이 있어서 적용하다가 궁금한 것이 생겼습니다.

두가지 차이가 어떤 것인가요? 게시판 스킨에서 사용하려니 두번째 것은 변수에 아무것도 담기지 않아서 첫번째 것으로 했습니다.

 

댓글 14

  • getenv()는 함수를 통해서 환경 변수값을 가져오는 것이고 $_SERVER는 환경 변수에 직접접근 하는것으로 알고 있었는데 서로 값이 다른 경우도 있는 모양이네요 @.@
  • @prologos
    근데 제가 궁금한건 애드온에서는 $_SERVER['HTTP_USER_AGENT'] 사용해서 문제가 없었거든요.

    근데 템플릿에서 직접 사용하니 안되는데 혹시 템플릿에서는 쌍따옴표로 써야 할까요???
  • 스킨이나 템플릿에서는 보안상 막아놓은게 아닐까요? 그래서 getenv 를 쓰는듯요
  • @GG
    뭔가 비밀이 있나보네요..
  • 함수 형태냐 변수 형태냐의 차이만 있을 뿐 둘다 같은 값을 출력합니다.

    템플릿 파일에서 변수 형태 {$_SERVER['HTTP_USER_AGENT']}를 쓰면 내부 변수로 보고 컴파일시 $__Context->_SERVER['HTTP_USER_AGENT'] 이런 형태로 변환되어 정상적인 값이 출력되지 않습니다.

    굳이 템플릿 파일에서 변수 형태를 쓸려면 <?php echo $_SERVER['HTTP_USER_AGENT'] ?> PHP 코드
    형태로 쓰면 됩니다.

  • @conory
    스킨에서는 어떻게 넣나요??
  • @웹지기
    <!--@if(getenv('HTTP_USER_AGENT'))-->
    ~
    <!--@end-->

    이렇게 함수 형태로 쓰거나

    <?php if($_SERVER['HTTP_USER_AGENT']){ ?>
    ~
    <?php } ?>

    이렇게 PHP 코드 형태로도 쓸 수 있습니다.
  • @conory
    아래것은 변수에 한번 넣어서 사용을 못한다는 것으로 이해가 되는데 맞게 이해한건지 모르겠네요.
  • @웹지기

    정리하자면,
    {$_SERVER['HTTP_USER_AGENT']} 이런 형태가 안된다는 거지, 굳이 쓸려면 <?php echo $_SERVER['HTTP_USER_AGENT'] ?> 이렇게 써야 된다는 거구요.

    그 이유는 {$_SERVER['HTTP_USER_AGENT']} 이렇게 쓰면 템플릿 엔진에서 무조건 $__Context->_SERVER['HTTP_USER_AGENT']으로 자동 변환하여 안된다는 그런 얘기입니다.

    결론은 템플릿 엔진의 버그로 안된다는 그런 얘기입니다.

  • @conory
    아.. 안되는거군요. 자세한 설명 감사합니다.
  • @웹지기
    참고로 라이믹스에서는 $_SERVER처럼 특수한 의미를 갖는 변수를 별도로 취급하므로 템플릿에서도 자유롭게 사용할 수 있습니다^^
  • @기진곰
    깨알같은 라이믹스 홍보~
  • CONORY님 말씀 듣고보니 이해가 되네요.
    템플릿 문법안에 $_SERVER['HTTP_USER_AGENT']를 사용하게되면 문제가 될수 있겠네요.

    간단한 예로 스킨파일 안에 아래처럼 변수를 설정했다면
    <?php
    $a='123';
    ?>
    {@
    $a='456';
    }
    둘은 서로 다른 변수 입니다. php단에서 보면 위쪽은 $a, 아래쪽은 $__Context->a입니다.

  • @prologos
    그래서 값이 없는거 였네요.