bool mkdir ( string $pathname [, int $mode= 0777] )

해당하는 경로 안에 디렉토리를 생성해야할 경우 mkdir 함수를 사용합니다. 이 함수는 해당 경로 안에 새로운 디렉토리를 만듭니다.

$pathname 인자에는 생성할 경로명을 지정하고, $mode 인자에는 퍼미션(권한설정)을 지정합니다. $mode 를 생략할 경우 기본값 0755로 자동 지정되며, 윈도우에서는 동작하지 않습니다.

디렉토리 생성에 성공하면 true를 반환하고, 실패하면 PHP 오류를 표시하게 됩니다. 그러므로 mkdir 함수 앞에 @를 붙여서 오류 코드가 표시되지 않도록 하여 보안 유효성을 높여 줘야 합니다.

<?php
 $mydir = "dir";
 if(@mkdir($mydir, 0777)) {
    if(is_dir($mydir)) {
        @chmod($mydir, 0777);
        echo "${mydir} 디렉토리를 생성하였습니다.";
    }
 }
 else {
    echo "${mydir} 디렉토리를 생성하지 못했습니다.";
 }
 ?>

디렉토리 생성실패에는 이유가 몇 가지있습니다.

존재하지 않는 경로이거나 상위디렉토리의 권한이 0707, 0777이 아니거나 디렉토리가 이미 생성되어 있으면 PHP 오류코드를 표시하게 됩니다. 권한 문제의 경우 Owner(오너)와 Public(유저)에게 쓰기권한이 없을 때 오류가 나타납니다. 쓰기권한이 있어야 생성하니까요.

설 명
Owner(소유자) Group(그룹) Public(유저)
Read(읽기) 400 (R) 40 (R) 4 (R)
Write(쓰기) 200 (W) 20 (W) 2 (W)
Execute(실행) 100 (X) 10 (X) 1 (X)
Permission(권한 700 (RWX) 70 (RWX) 7 (RWX)

권한을 설정할 때 주의할 점은 8진수로 작성해야 한다는 점입니다. 777로 권한을 처리하고자 한다면 앞자리에 0을 추가해서 0777로 하면 자동으로 8진수로 처리하게 됩니다. 그리고 작은따옴표('')나 큰 따옴표("")로 감싸 주어서도 안 됩니다. 반드시 8진수로 작성해야 합니다.

<?php
 $mydir = "dir";

 @mkdir($mydir,"0777"); 
 // 잘못된 표현

 @mkdir($mydir, 0777); 
 // 올바른 표현
 ?>

0 댓글