【PHP】 DIRECTORY_SEPARATOR 사용 이유

DIRECTORY_SEPARATOR

[PHP 목차]

DIRECTORY_SEPARTOR는 경로 구분자를 나타내는 상수 입니다. 예를 들어 윈도우에서 파일의 경로를 나타낼 때 “c:\widnows\filename.exe” 이런식으로 표현할 수 있는데, 여기서 디렉토리를 구분하는 “\”가 바로 DIRECTORY_SEPARATOR에 해당합니다. 그러면 그냥 “\”를 사용하면 될 것 같은데, 왜 굳이 길게 DIRECTORY_SEPARATOR 상수를 사용해야 하나요?라고 생각할 수 있습니다. 가장 간단한 답변은 운영 체제에 따라 경로 구분자가 다르기 때문입니다. 윈도우에서는 역슬래쉬 “\”를 사용하지만, 맥이나 리눅스에서는 정슬래쉬 “/”를 사용합니다. 따라서 운영체제 별로 정확한 경로 구분자를 사용하기 위해 DIRECTORY_SEPARTOR 상수가 만들어졌는데, 사실 사용 여부에 대한 의견은 분분한거 같습니다. 왜냐하면, 윈도우에서 정슬래쉬(/)를 사용하여 “c:/windows” 이런식으로 표현해도 작동하기 때문입니다. 아무튼 아래 예제에서 운영체제 별로 어떤 값을 가지는지 확인해 보겠습니다.

[1] 윈도우에서 PHP를 돌렸을 경우

<?php
    echo php_uname();
    echo “<br>”;
    echo DIRECTORY_SEPARATOR;
?>
Windows NT DESKTOP-HMFPCBR 10.0 build 19044 (Windows 10) AMD64
\
  • 목표
    • 윈도우에서 상수 DIRECTORY-SEPARTOR가 어떤 값을 가지는지 확인합니다.
  • 코드
    • echo php_uname(); echo는 화면에 출력하는 언어 구성 요소이고, php_uname은 운영체제를 확인할 때 사용하는 함수입니다. 언어 구성 요소(예: echo)와 함수(예: print)의 차이는 [PHP] echo와 print 차이점 포스트에서 자세히 다루고 있습니다.
    • echo “<br>”; 인터넷 브라우저에서 줄 바꿈을 합니다.
    • echo DIRECTORY_SEPARATOR; 상수 DIRECTORY_SEPARATOR를 출력합니다.
  • 출력 결과
    • 출력 결과를 보면, 먼저 php_uname()에 의해서 window에서 구동되고 있음을 확인할 수 있습니다. 그리고 다음 줄을 보면 윈도우에서는 DIRECTORY_SEPARATOR의 값이 역슬래쉬 “\”임을 확인할 수 있습니다.

[2] 리눅스에서 PHP를 돌렸을 경우

<?php
    echo php_uname();
    echo “<br>”;
    echo DIRECTORY_SEPARATOR;
?>
Linux 537aee6aa4d98 = 4.19.0-21-cloud-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
/
  • 목표
    • 리눅스에서 상수 DIRECTORY-SEPARTOR가 어떤 값을 가지는지 확인합니다.
  • 코드
    • 앞 섹션에서 작성한 코드랑 동일합니다.
    • echo php_uname(); echo는 화면에 출력하는 언어 구성 요소이고, php_uname()은 운영체제를 확인할 때 사용하는 함수입니다. 언어 구성 요소(예: echo)와 함수(예: print)의 차이는 [PHP] echo와 print 차이점 포스트에서 자세히 다루고 있습니다.
    • echo “<br>”; 인터넷 브라우저에서 줄 바꿈을 합니다.
    • echo DIRECTORY_SEPARATOR; 상수 DIRECTORY_SEPARATOR를 출력합니다.
  • 출력 결과
    • 출력 결과를 보면, 먼저 php_uname()에 의해서 Linux에서 구동되고 있음을 확인할 수 있다. 그리고 다음 줄을 보면 리눅스에서는 DIRECTORY_SEPARATOR의 값이 정슬래쉬 “/”임을 확인할 수 있습니다. 맥에서도 동일한 결과값을 가집니다.

1 thought on “【PHP】 DIRECTORY_SEPARATOR 사용 이유”

  1. Pingback: PHP 목차 ⋆ Our Small Joy

Leave a Reply