해당하는 경로안에 디렉토리를 생성해야할 경우 mkdir 함수를 사용합니다. 이 함수는 해당 경로 안에 생성할 경로명과 권한설정을 담당하며, 생성은 윈도우나 유닉스계열에 정상 동작하지만 권한설정만은 윈도우에서는 동작하지 않습니다.

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

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

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

예제 (ex #1
 <?php
 $mydir 
"dir"
;
 if(@
mkdir($mydir0777
)) {
    if(
is_dir($mydir
)) {
        @
chmod($mydir0777
);
        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진수로 작성하여야 합니다.

예제 (ex #2
 <?php
 $mydir 
"dir"
;

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

 
@mkdir($mydir0777); 
// 올바른 표현

 
?>
블로그 이미지

하보니

하보니와 함께하는 phP 초보

댓글을 달아 주세요