カテゴリ: PHP 更新日: 2026/06/15

PHPでディレクトリを作成・操作する方法!初心者向けにmkdir・rmdir・scandirをやさしく解説

PHP でディレクトリを作成・操作する方法(mkdir, rmdir, scandir)
PHP でディレクトリを作成・操作する方法(mkdir, rmdir, scandir)

先生と生徒の会話形式で理解しよう

生徒

「PHPでフォルダを作ったり、中のファイルを調べたり、削除したりできますか?」

先生

「はい、できますよ。PHPにはmkdirrmdirscandirというディレクトリ(フォルダ)を扱うための関数があります。」

生徒

「ディレクトリって、パソコンの中のフォルダのことですよね?」

先生

「そのとおりです!今回はそのディレクトリをPHPで作ったり、調べたり、削除したりする方法を、プログラミング初心者にもわかりやすく説明していきます。」

1. ディレクトリとは何かを知ろう

1. ディレクトリとは何かを知ろう
1. ディレクトリとは何かを知ろう

プログラミングの世界で頻繁に登場する「ディレクトリ(directory)」。難しく聞こえるかもしれませんが、その正体は私たちが普段WindowsやMac、スマートフォンで使っている「フォルダ」と全く同じものです。

ファイルが増えてくると、「画像」「ドキュメント」「設定用」といった具合に種類ごとに整理したくなりますよね。この「ファイルを整理するための入れ物」を、ITの専門用語ではディレクトリと呼びます。

身近な例えでイメージしてみよう:
  • ファイル: ノートに書いた「1ページ分のメモ」
  • ディレクトリ: そのメモを綴じておく「バインダー」や「引き出し」

PHPというプログラミング言語を使うと、このディレクトリを「自動」で操作できるようになります。たとえば、以下のようなイメージです。


<?php
// PHPで「2026年_写真保存用」という名前のディレクトリ(フォルダ)を
// 作成するイメージをコードで表すとこのようになります
$folder_name = "2026年_写真保存用";

echo "「" . $folder_name . "」というディレクトリを作成し、ファイルを整理します。";
?>

手動で右クリックして「新規フォルダ作成」をする代わりに、PHPプログラムがあなたの代わりにディレクトリを作ったり、中身をチェックしたりしてくれるのです。これにより、大量のデータを扱うシステムでも、迷子にならないようにきれいに整理整頓することが可能になります。

2. mkdir関数でディレクトリを作成する方法

2. mkdir関数でディレクトリを作成する方法
2. mkdir関数でディレクトリを作成する方法

PHPで新しくフォルダを作りたいときは、mkdir(メイク・ディレクトリ)関数を使います。これは、パソコンのデスクトップで「右クリック > 新規作成 > フォルダ」と操作するのを、プログラムに代行させる命令です。

まずは、最もシンプルで安全な書き方を見てみましょう。プログラミング未経験の方でも、以下のコードをコピーして実行するだけでディレクトリが作成できます。


<?php
// 作成したいフォルダの名前を決める
$directory_name = "new_folder";

// すでに同じ名前のフォルダがないかチェックする
if (!is_dir($directory_name)) {
    // フォルダを作成する(mkdirを実行)
    if (mkdir($directory_name, 0777)) {
        echo "「" . $directory_name . "」というフォルダを無事に作成しました!";
    } else {
        echo "エラー:フォルダの作成に失敗しました。";
    }
} else {
    // すでに存在する場合のメッセージ
    echo "「" . $directory_name . "」は、すでに存在しています。";
}
?>
ここがポイント!
  • is_dir関数: 同じ名前のフォルダがすでにある場合、mkdirを実行するとエラーになってしまいます。事前に「ないこと」を確認するのがプロの書き方です。
  • パーミッション(0777): mkdirの2番目の設定で、フォルダの「読み書き権限」を指定できます。Webサーバーで動かす際に「書き込めない!」というトラブルを防ぐための重要な数値です。
  • 再帰的作成: mkdir("a/b/c", 0777, true)のように、3番目の設定にtrueを入れると、深い階層のフォルダも一気に作れて便利です。

この基本を押さえておけば、ユーザーが会員登録した瞬間にその人専用の画像保存フォルダを自動で作る、といった便利なシステムも簡単に実装できるようになります。

3. scandir関数でディレクトリの中身(ファイル一覧)を確認する

3. scandir関数でディレクトリの中身(ファイル一覧)を確認する
3. scandir関数でディレクトリの中身(ファイル一覧)を確認する

ディレクトリを作成した後は、その中にどんなファイルが入っているか確認したくなりますよね。そんな時に便利なのがscandir(スキャンディア)関数です。この関数を使うと、指定したフォルダ内にあるファイルやフォルダの名前を「一覧リスト(配列)」として丸ごと取得できます。

例えば、画像が保存されている「images」というフォルダの中身を画面に表示させたい場合は、以下のように記述します。プログラミング未経験の方でも、foreachという命令を使えば、リストの中身を一つずつ順番に取り出すことができますよ。


<?php
// 調べたいディレクトリの名前を指定
$dir = "images";

// ディレクトリが存在するか確認してから実行するのが安全
if (is_dir($dir)) {
    // 中身をスキャンして配列(リスト)に代入
    $files = scandir($dir);

    echo "<h3>フォルダ内の一覧:</h3>";
    echo "<ul>";
    // 配列の中身を一つずつ取り出して表示
    foreach ($files as $file) {
        echo "<li>" . $file . "</li>";
    }
    echo "</ul>";
} else {
    echo "指定したディレクトリが見つかりませんでした。";
}
?>
注意!「.」と「..」の正体とは?

scandirを実行すると、自分で作った覚えのない「.(ドット)」「..(ドットドット)」という名前が必ずリストに出てきます。これは故障ではなく、システム上の大切なルールです。

  • . (ピリオド1つ): 「今見ているディレクトリ自身」を指します。
  • .. (ピリオド2つ): 「一つ外側の(上の階層の)ディレクトリ」を指します。

実際のWebサイト制作では、if文を使ってこの2つを除外して表示させるのが一般的です。まずは「こういうものが入ってくるんだな」と覚えておけばOKです。

この関数を使えば、「アップロードされた写真を一覧表示するギャラリーページ」や「自動でファイル名を取得してリンクを作る機能」などが簡単に作れるようになります。

4. rmdir関数でディレクトリを削除する方法

4. rmdir関数でディレクトリを削除する方法
4. rmdir関数でディレクトリを削除する方法

作成したディレクトリが不要になったときは、rmdir(リムーブ・ディレクトリ)関数を使って削除します。これは、ゴミ箱にフォルダを捨てる操作をプログラムで実行するイメージです。

ただし、一つだけ大きな注意点があります。rmdir「中身が空っぽのディレクトリ」しか削除できないというルールがあります。中にファイルが一つでも残っているとエラーになってしまうため、まずは空のディレクトリを安全に消す基本コードを覚えましょう。


<?php
// 削除したいディレクトリの名前を指定
$dir_to_delete = "temporary_folder";

// 1. まず、そのディレクトリが本当に存在するか確認
if (is_dir($dir_to_delete)) {
    // 2. ディレクトリを削除する(rmdirを実行)
    if (rmdir($dir_to_delete)) {
        echo "「" . $dir_to_delete . "」を正常に削除しました。";
    } else {
        echo "エラー:ディレクトリが空ではないか、権限がありません。";
    }
} else {
    // 存在しない場合のメッセージ
    echo "削除しようとした「" . $dir_to_delete . "」は見つかりませんでした。";
}
?>
ここが注意ポイント!
  • 空でないと消せない: 中に画像やテキストファイル、あるいは別のフォルダが入っている場合は、先に中身をすべて空にする必要があります。
  • 権限(パーミッション): mkdirの時と同様に、サーバーの設定によっては「削除する権限」がなくて失敗することもあります。
  • 存在確認が大事: 存在しないフォルダを消そうとするとエラー(Warning)が出るため、必ずis_dirでチェックするのがWeb開発のセオリーです。

初心者のうちは、一時的に作ったテスト用の空フォルダを整理する目的でこの関数を使ってみるのが、一番安全で確実な練習方法ですよ。

5. よくあるつまずきポイントと対策

5. よくあるつまずきポイントと対策
5. よくあるつまずきポイントと対策
  • パーミッションエラー:フォルダを作れない・消せないときは、パソコンやサーバーの「書き込み権限」が原因のことが多いです。
  • すでに存在している:同じ名前のフォルダがあると、mkdirでエラーになります。is_dirで確認しましょう。
  • 空でないディレクトリrmdirは空でないと削除できません。中のファイルをすべて削除する処理が必要です。

6. 応用編:ディレクトリ内のファイルをすべて削除する

6. 応用編:ディレクトリ内のファイルをすべて削除する
6. 応用編:ディレクトリ内のファイルをすべて削除する

中にファイルがあるディレクトリを削除したい場合は、scandirでファイル一覧を取得し、unlinkで削除してからrmdirを実行します。


<?php
$dir = "example";
if (is_dir($dir)) {
    $files = scandir($dir);
    foreach ($files as $file) {
        if ($file !== "." && $file !== "..") {
            unlink($dir . "/" . $file);
        }
    }
    rmdir($dir);
    echo "フォルダと中身を削除しました。";
}
?>

これは少し難しいですが、実務ではよく使われる処理です。初心者の方はまず動作を確認して、徐々に理解を深めていきましょう。

7. PHPでディレクトリを操作する場面とは?

7. PHPでディレクトリを操作する場面とは?
7. PHPでディレクトリを操作する場面とは?

PHPでフォルダ(ディレクトリ)を扱うシーンは意外と多くあります。たとえば:

  • 画像のアップロード時にフォルダを自動作成
  • ユーザーごとのデータ保存場所を用意
  • 定期的に古いファイルを削除するバッチ処理
  • 管理画面からフォルダの中身を確認する

このように、mkdir・scandir・rmdirを使いこなすことで、PHPのファイル管理がグッとレベルアップします。

まとめ

まとめ
まとめ

PHPでディレクトリを操作する方法は、初心者が最初につまずきやすい部分ですが、この記事で学んだように基礎となる関数をしっかり理解すれば確実に扱えるようになります。とくに、mkdirで新しいフォルダを生成する仕組み、scandirでフォルダの中身を一覧として取得する方法、そしてrmdirで安全にディレクトリを削除する流れは、ファイル管理を行ううえで欠かせない重要な操作です。これらを適切に組み合わせることで、画像管理やユーザーデータ管理といった実用的な処理にも応用できるようになります。

また、ディレクトリを扱う際には、書き込み権限の確認や「空でないディレクトリは削除できない」という基本ルールを忘れないことが大切です。実務では多くのアプリケーションで自動的にフォルダが生成されたり、不要なデータが削除されたりするため、今回の知識はPHP開発全体で役立ちます。特に、is_dirunlinkを組み合わせて状態を判断しながら処理を進めることで、安全にディレクトリ操作を行うことができます。

以下は今回の内容をふり返る意味で、基本的なディレクトリ操作をひとまとめにしたサンプルコードです。実際の開発ではこれを応用して、ユーザーごとにフォルダを作成したり、自動的に古いファイルを整理したりする機能に発展させることができます。

サンプルプログラムまとめ


<?php
$dir = "sample_dir";

// ディレクトリがなければ作成
if (!is_dir($dir)) {
    mkdir($dir);
    echo "新しいフォルダを作成しました。\n";
}

// フォルダの一覧を確認
$items = scandir($dir);
foreach ($items as $item) {
    echo "中身:" . $item . "\n";
}

// 中身を削除してからフォルダを削除
foreach ($items as $item) {
    if ($item !== "." && $item !== "..") {
        unlink($dir . "/" . $item);
    }
}
rmdir($dir);
echo "フォルダと中身を安全に削除しました。";
?>

このコードでは、フォルダの作成・確認・削除までの流れをひとつの処理として確認できます。ディレクトリ操作はファイルアップロードやキャッシュ管理など幅広い用途で必要となるため、確実に身につけておくと開発の幅が大きく広がります。初心者でも、ひとつひとつの動作を確認しながら学ぶことで理解が深まり、より実践的な処理にも対応できるようになります。

先生と生徒の振り返り会話

生徒
「今日の内容で、フォルダを作ったり中を調べたり、全部PHPでできることがわかりました。mkdirとscandirとrmdirの役割がはっきり見えてきました!」

先生
「その理解はとても良いですね。ディレクトリ操作はアプリケーションでよく使うので、今回の知識は必ず役に立ちますよ。特に、scandirで一覧を取得してから内容を処理する流れは実務でもよく使います。」

生徒
「フォルダの中が空じゃないとrmdirが失敗する理由もよくわかりました。unlinkで中身を削除してから実行するのも勉強になりました。」

先生
「とても良いですね。実際の開発でもまず状況を確認してから処理を進めるのが大切なので、今日学んだ流れをしっかり覚えておきましょう。」

生徒
「はい!次はもっと応用的なディレクトリ操作にも挑戦してみたいです!」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
PHP のファイル処理の記事一覧へ
新着記事
New1
PHP
PHPのforeachループを完全ガイド!初心者でもわかる配列・連想配列の処理
New2
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
New3
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
New4
Python
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本
No.2
Java&Spring記事人気No2
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
No.3
Java&Spring記事人気No3
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を計測する方法を完全解説!初心者でもわかる time.perf_counter() と time.sleep()
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonのリストを反転(逆順)する方法を解説!初心者向けにreverseメソッドとスライス表記[::−1]を丁寧に説明
No.7
Java&Spring記事人気No7
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.8
Java&Spring記事人気No8
PHP
PHPのセキュリティチェックリストを丁寧に解説!初心者でも理解できる安全対策ガイド