
고급 PHP 프로그래밍 – 파일 처리 – 디렉터리 다루기
안녕하세요! 😊
이번 시간에는 PHP에서 파일만큼이나 중요한 **디렉터리(폴더)**를 다루는 방법을 알아보겠습니다.
디렉터리는 마치 책장을 구성하는 서랍처럼, 여러 파일을 체계적으로 정리하고 보관하는 공간이에요.
실제 웹 개발에서는 이미지 업로드 폴더, 로그 저장 폴더, 사용자별 파일 디렉터리 등 다양한 곳에서 활용되죠!
이제부터는 디렉터리를 생성하고, 탐색하고, 삭제하는 방법까지 차근차근 알려드릴게요!
1. 디렉터리 생성하기: mkdir()
✅ 기본 문법
mkdir("폴더경로", 권한, 재귀생성여부);
"폴더경로"
: 만들 디렉터리 경로권한
: 보통0755
또는0777
재귀생성여부
: 상위 폴더까지 함께 생성하려면true
🧪 예제 1: 단일 폴더 만들기
if (!file_exists("uploads")) {
mkdir("uploads", 0755);
echo "📁 'uploads' 폴더 생성 완료!";
}
🧪 예제 2: 하위 폴더 포함 생성
$path = "logs/2025/06/21";
if (!file_exists($path)) {
mkdir($path, 0755, true); // 상위 폴더까지 한 번에 생성!
echo "📂 $path 폴더가 재귀적으로 생성되었습니다.";
}
💡
0777
은 모든 권한 허용 (테스트 용도), 실무에서는0755
권장!
2. 디렉터리 존재 여부 확인: is_dir()
$folder = "backup";
if (is_dir($folder)) {
echo "'$folder' 는 디렉터리입니다.";
} else {
echo "'$folder' 는 디렉터리가 아닙니다.";
}
file_exists()
는 파일/디렉터리 둘 다 확인,is_dir()
은 디렉터리만 확인!
3. 디렉터리 안의 파일 목록 가져오기
✅ 방법 ①: scandir()
$files = scandir("uploads");
foreach ($files as $file) {
if ($file != "." && $file != "..") {
echo "📄 파일: $file <br>";
}
}
✅ 방법 ②: opendir()
+ readdir()
$handle = opendir("uploads");
while (($file = readdir($handle)) !== false) {
if ($file != "." && $file != "..") {
echo "📎 $file <br>";
}
}
closedir($handle);
💡
.
은 현재 디렉터리,..
은 상위 디렉터리이므로 반드시 제외해야 해요!
4. 디렉터리 삭제: rmdir()
if (is_dir("old_backup")) {
rmdir("old_backup");
echo "🗑️ 폴더가 삭제되었습니다.";
}
⚠️ 단, 비어 있는 디렉터리만 삭제 가능해요! 파일이 들어있으면 오류 발생합니다.
🧪 예제 3: 비어 있지 않은 폴더 삭제 (재귀 함수 활용)
function deleteDirectory($dir) {
if (!is_dir($dir)) return false;
$files = scandir($dir);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$path = "$dir/$file";
if (is_dir($path)) {
deleteDirectory($path); // 재귀 호출
} else {
unlink($path); // 파일 삭제
}
}
}
return rmdir($dir); // 폴더 삭제
}
deleteDirectory("logs/2024");
5. 실전 예제: 특정 확장자만 필터링
$images = array_filter(scandir("gallery"), function($file) {
return preg_match("/\.(jpg|png|gif)$/i", $file);
});
foreach ($images as $img) {
echo "🖼️ 이미지 파일: $img<br>";
}
6. 디렉터리 퍼미션 변경: chmod()
chmod("uploads", 0755); // 웹서버가 읽고 쓸 수 있도록 권한 설정
퍼미션 문제로 업로드가 실패할 경우 꼭 체크해보세요!
🔍 디렉터리 관련 주요 함수 정리
함수 | 설명 |
---|---|
mkdir() |
디렉터리 생성 |
rmdir() |
빈 디렉터리 삭제 |
is_dir() |
디렉터리 여부 확인 |
file_exists() |
파일 또는 디렉터리 존재 여부 확인 |
scandir() |
디렉터리의 파일 목록 배열로 반환 |
opendir() / readdir() |
디렉터리 핸들 열고 읽기 |
closedir() |
디렉터리 핸들 닫기 |
unlink() |
파일 삭제 |
chmod() |
디렉터리 권한 변경 |
❗ 주의사항 정리
항목 | 주의할 점 |
---|---|
디렉터리 삭제 | rmdir() 는 반드시 비어 있어야만 작동함 |
퍼미션 | uploads , logs 등은 웹 서버에 쓰기 권한 필요 |
상위 디렉터리 | mkdir() 에서 recursive 옵션이 없으면 상위 폴더 없을 때 오류 |
경로 표기 | Linux는 / , Windows는 \ 지만 PHP에서는 / 통일 가능 |
보안상 조심 | 사용자 입력으로 디렉터리명을 직접 받는 경우 디렉터리 경로 조작 공격 주의! |
마무리하며 😊
PHP에서 디렉터리를 다룰 수 있으면 훨씬 더 유연한 파일 구조와 관리가 가능해져요!
예를 들어 날짜별 로그 저장, 사용자별 이미지 폴더 생성, 자동 백업 폴더 등 다양한 실무 응용이 가능하답니다.
다음 시간에는 파일 및 디렉터리 권한 설정과 보안 처리에 대해 심도 있게 다뤄보겠습니다.
오늘도 실력 한 단계 업! 즐거운 코딩 되세요! 💻📂✨