고급 PHP 프로그래밍 – 파일 처리 – 2 – 디렉터리 다루기

고급 PHP 프로그래밍 - 파일 처리 - 2 - 디렉터리 다루기
고급 PHP 프로그래밍 – 파일 처리 – 2 – 디렉터리 다루기

고급 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에서 디렉터리를 다룰 수 있으면 훨씬 더 유연한 파일 구조와 관리가 가능해져요!
예를 들어 날짜별 로그 저장, 사용자별 이미지 폴더 생성, 자동 백업 폴더 등 다양한 실무 응용이 가능하답니다.

다음 시간에는 파일 및 디렉터리 권한 설정과 보안 처리에 대해 심도 있게 다뤄보겠습니다.
오늘도 실력 한 단계 업! 즐거운 코딩 되세요! 💻📂✨

답글 남기기