유용한 기능들

유용한 기능들

이제 좀 더 유용한 작업을 수행해 보겠습니다. 방문자가 어떤 종류의 브라우저를 사용하는지 확인할 것입니다. 이를 위해 브라우저가 HTTP 요청의 일부로 보내는 user agent 문자열을 확인합니다. 이 정보는 변수에 저장됩니다. PHP에서 변수는 항상 달러 기호($)로 시작합니다. 지금 관심 있는 변수는 $_SERVER['HTTP_USER_AGENT']입니다.

Note:

$_SERVER는 모든 웹 서버 정보를 포함하는 특수 예약 PHP 변수입니다. superglobal로 알려져 있습니다. 자세한 내용은 superglobals에 대한 관련 매뉴얼 페이지를 참조하십시오.

이 변수를 표시하려면 다음을 수행하면 됩니다.

Example #1 변수 출력하기 (배열 요소)

                  
<?php
  echo $_SERVER['HTTP_USER_AGENT'];
?>
                  
                

이 스크립트의 샘플 출력은 다음과 같습니다.

                  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
                  
                

PHP에는 많은 유형의 변수가 있습니다. 위의 예에서 우리는 Array 요소를 출력했습니다. 배열은 매우 유용합니다.

$_SERVER는 PHP가 자동으로 제공하는 변수 중 하나일 뿐입니다. 목록은 매뉴얼의 예약 변수 섹션에서 보거나 이전 섹션의 예제에서 사용된 phpinfo() 함수의 출력을 보면 전체 목록을 얻을 수 있습니다.

PHP 태그 안쪽으로 하나의 echo뿐이 아닌 여러개의 PHP문을 넣어서 작은 코드 블럭을 만들 수 있습니다. 예를 들어 Internet Explorer를 확인하려면 다음을 수행할 수 있습니다.

Example #2 제어문함수를 사용하는 예제

                  
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
  echo 'Internet Explorer를 사용하고 있습니다.<br />';
}
?>
                  
                

이 스크립트의 샘플 출력은 다음과 같습니다.

                  
Internet Explorer를 사용하고 있습니다.

여기에서 몇 가지 새로운 개념을 소개합니다. if 문이 있습니다. C 언어에서 사용하는 기본 구문에 익숙하다면 이것이 논리적으로 보일 것입니다. 그렇지 않다면 아마도 PHP 입문서를 집어 들고 처음 몇 개의 장을 읽거나 매뉴얼의 언어 참조 부분을 읽어야 할 것입니다.

두 번째 개념은 strpos() 함수 호출입니다. strpos()는 하나의 문자열을 다른 문자열에서 찾아내는 PHP 내장 함수입니다. 이 경우 $_SERVER['HTTP_USER_AGENT'](haystack이라고 합니다) 내부에서 'MSIE'(needle이라고 합니다)를 찾고 있습니다. haystack 안에서 needle을 발견하면, 이 함수는 haystack의 첫번째 문자로부터 needle의 위치를 반환합니다. 발견하지 못했다면 FALSE를 반환합니다. FALSE를 반환하지 않았다면, if문은 TRUE로 판단하고 {중괄호} 안에 있는 코드를 실행합니다. 그렇지 않으면, 코드를 실행하지 않습니다. if, else, strtoupper()strlen()과 같은 기타 함수를 사용하여 유사한 예제를 자유롭게 만들 수 있습니다. 관련된 각 매뉴얼 페이지에도 예제가 포함되어 있습니다. 함수를 사용하는 방법을 잘 모르는 경우 함수 정의를 읽는 방법에 대한 매뉴얼 페이지와 PHP 함수에 대한 섹션을 모두 읽고 싶을 것입니다.

한걸음 더 나아가서, PHP 블록 안에서 어떻게 PHP 모드를 드나드는지 알아봅시다:

Example #3 HTML과 PHP 모드 섞기

                  
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos()는 false가 아닌 것을 반환했습니다.</h3>
<p>Internet Explorer를 사용하고 있습니다.</p>
<?php
} else {
?>
<h3>strpos()는 false를 반환했습니다.</h3>
<p>Internet Explorer를 사용하고 있지 않습니다.</p>
<?php
}
?>
                  
                

이 스크립트의 샘플 출력은 다음과 같습니다.

                  
<h3>strpos()는 false가 아닌 것을 반환했습니다.</h3>
<p>Internet Explorer를 사용하고 있습니다.</p>
                  
                

PHP echo 문을 사용하여 무언가를 출력하는 대신 PHP 모드에서 빠져 나와 바로 HTML을 보냈습니다. 여기서 주목해야 할 중요하고 강력한 점은 스크립트의 논리적 흐름이 그대로 유지된다는 것입니다. strpos()의 결과에 따라 HTML 블록 중 하나만 뷰어로 전송됩니다. 즉, 문자열 MSIE를 찾았는지 여부에 따라 다릅니다.