php로 디렉토리를 만들려고 mkdir()를 이용했습니다만, 삽질을 좀 했네요..ㅡ.ㅡ
bool mkdir ( string $pathname
[, int $mode
= 0777 [, bool $recursive
= false [, resource $context
]]] )
php 가 실행되는 동안 현재 디렉토리 . 은 php 파일이 위치하고 있는 디렉토리를 의미하죠.
www/dir1/a.php 가 있다고 가정합니다.
a.php 안에서 아래 mkdir()를 실행시킵시다.
mkdir('test');
www/dir1/test/ 가 생깁니다.
mkdir('./test'); 와 결과가 같지요.
mkdir('../test');
www/test/ 가 생깁니다.
이제 삽질한 부분..ㅡ.ㅡ
www/test/test1 을 만들고 싶어서 아래와 같이 작성했었습니다.
mkdir('../test/test1');
결과는 실패...
www/test를 만들고 그 안에 들어가서 다시 test1 을 만들어야하죠.
recursive 한 상황이 생긴겁니다. 이걸 모르고 계속 다른 원인을 찾아 해맸습니다. ㅋ
디렉토리 하나가 아니고, 그 아래에 더, 더, 만들고 싶을 때는 recursive 인자를 true 로 설정하고 함수를 호출해야합니다.
mkdir('../test/test1', 0777, true);
0777 디렉토리의 권한설정입니다. 기본 값이 0777 이네요.
아! 그리고,
mkdir('../test/test1');
와
mkdir('../test/test1/');
는 같습니다.
디렉토리 이름 뒤에 / 를 붙여도 되고 안 붙여도 됩니다.
만든 디렉토리를 삭제하는 방법은 rmdir()입니다.
bool rmdir ( string $dirname
[, resource $context
] )
이건 쉽습니다.
rmdir('../test/test1');
이렇게 하면 상위 디렉토리 test 안에 있는 test1 디렉토리를 삭제합니다.
그럼, rmdir('../test/'); 라고 하면, 그 안에 있는 test1 도 몽땅 같이 지워질까요??
recursive 하게 동작을 할까요??
No, recursive 하게 동작하지 않습니다.
그래서 , php.net 의 rmdir() 설명 부분에 있는 예를 올립니다. recursive 하게 동작하는, 하위 디렉토리까지 모조리 삭제해주는 코드입니다.
<?php function rrmdir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); } } reset($objects); rmdir($dir); } } ?> |
rrmdir() 함수 내에 다시 rrmdir() 함수가 보이죠?? 까칠한 재귀함수입니다.
못 본 함수가 몇개 있네요.
is_dir()
bool is_dir ( string $filename
)
$filename으로 입력해준 값이 존재하는 디렉토리라면 true를 리턴해줍니다.
scandir()
array scandir ( string $directory
[, int $sorting_order
= SCANDIR_SORT_ASCENDING [, resource $context
]] )
디렉토리를 지정하면 그 안에 있는 파일과 디렉토리를 배열로 리턴해주는 함수 입니다.
filetype()
string filetype ( string $filename
)
$filename 의 타입을 리턴해줍니다. 유닉스, 리눅스의 경우, 모든 것이 파일로 처리됩니다. 그것들 중에 디렉토리도 있고, 파일도 있고, 소켓도 있고 머 그렇죠.
리턴값은 아래의 것들 중 하나입니다.
Possible values are fifo, char, dir, block, link, file, socket and unknown.
아니면, FALSE
unlink()
bool unlink ( string $filename
[, resource $context
] )
파일을 지웁니다.
삽질하지 맙시다..
'PHP' 카테고리의 다른 글
[설정] date.timezone (0) | 2013.02.05 |
---|---|
[PHP] array_push(), array_pop() (0) | 2013.01.23 |
[PHP] number_format() (0) | 2012.12.24 |
[PHP] move_uploaded_file() (0) | 2012.12.21 |
[PHP] time(), date(), mktime() (0) | 2012.12.21 |
댓글