【PHP入門】ディレクトリを削除する方法を解説!(rmdir)

phpでは、rmdir関数というディレクトリを削除する関数が提供されています。

「phpでディレクトリを削除する便利な関数ってあるの?」
「rmdir関数の使い方は?」
「空でないディレクトリを削除する方法は?」

といった方に向けて、この記事では


【基礎】ディレクトリを削除する方法について
【基礎】rmdir関数の使い方
【発展】空でないディレクトリの削除方法

など、phpでディレクトリを削除する方法についての基礎から発展的な内容について解説していきます。

目次

rmdirでディレクトリを削除する方法

phpでディレクトリを削除する方法として、「rmdir」という関数が用意されています。

rmdirは、指定したディレクトリを削除する関数であり、よく使われる関数です。

以下で、rmdirの概要と使い方について解説していきたいと思います。

rmdirとは

前述したとおり、rmdirはディレクトリを削除するphpの関数です。

rmdir関数は、以下のコードのように書きます。

引数には、ディレクトリ名(ディレクトリまでのパス)を渡します。

rmdir(ディレクトリ名);

指定したディレクトリが無かったなどでディレクトリの削除ができなかった場合は、e_warningレベルのエラーが発生する点に注意しましょう。

また、rmdirで指定したディレクトリ内にファイルや別のディレクトリが存在する場合は、rmdirでは指定したディレクトリを削除することができません。

その際には、指定したディレクトリ内を一度空にした後で、再度rmdirでディレクトリを削除する必要があります。

rmdirの使い方

それでは、実際にサンプルプログラムを用いて、rmdirの使い方を解説したいと思います。

// sampleディレクトリを作成
mkdir('sample');

// ディレクトリがあるかどうか確認
if (is_dir('sample')) {
    // ディレクトリ内に別のディレクトリやファイルがあるかどうか確認
    $files = array_diff(scandir('sample'), array('.','..'));
    if (empty($files)) {
        // ディレクトリを削除
        echo "ディレクトリ:sampleを削除n";
        rmdir('sample');
    }
}

サンプルプログラムでははじめに、mkdir関数を用いてsampleディレクトリを作成しておきます。

実際にrmdir関数を実行する前に、「指定ディレクトリがあるかどうか」「指定ディレクトリが空かどうか」を確認する必要があります。

この確認を怠ると、rmdir関数を実行した際にエラーがおきてしまう可能性があるためです。

まず、指定ディレクトリがあるかどうかは、5行目のis_dir(‘sample’)で確認します。

また、指定ディレクトリが空かどうかも、7-8行目の$files = array_diff(scandir(‘sample’), array(‘.’,’..’));があるかどうかで確認しています。

$filesはsampleディレクトリ内の「.」「..」以外の別のディレクトリやファイルの配列です。この$filesが空なら、rmdir関数を実行するようになっています。

そして、11行目でrmdir関数を実際に実行しています。

上記サンプルプログラムの実行結果は以下です。

ディレクトリ:sampleを削除

実行結果からもsampleディレクトリが削除できていることがわかると思います。

空ではないディレクトリを削除するには

前述した通り、rmdir関数は指定したディレクトリ内に別のディレクトリやファイルがある場合は削除できません。

なので、空ではないディレクトリを削除する場合は、指定したディレクトリ内の別のディレクトリやファイルを全て削除してから、再度rmdir関数で削除する必要があります。

以下に、空ではないディレクトリも削除できるサンプルプログラムを用意しました。

// 再帰的にディレクトリを削除する関数
function remove_directory($dir) {
    $files = array_diff(scandir($dir), array('.','..'));
    foreach ($files as $file) {
        // ファイルかディレクトリによって処理を分ける
        if (is_dir("$dir/$file")) {
            // ディレクトリなら再度同じ関数を呼び出す
            remove_directory("$dir/$file");
        } else {
            // ファイルなら削除
            unlink("$dir/$file");
            echo "ファイル:" . $dir . "/" . $file . "を削除n";
        }
    }
    // 指定したディレクトリを削除
    echo "ディレクトリ:" . $dir . "を削除n";
    return rmdir($dir);
}

// ディレクトリ、ファイルを作成
mkdir('test1');
mkdir('test1/test2');
touch('test1/test2/test3');

// 空ではないディレクトリを削除
remove_directory('test1');

サンプルプログラムでは、はじめにremove_directoryという関数を定義します。

このremove_directory関数は、指定したディレクトリの中身を確認し、中身がなければ指定ディレクトリを削除、中身があればその中身に合わせて処理を変えています。

3行目で、指定ディレクトリの中のファイル群(別のディレクトリやファイル)を取得し、4-14行目でそのファイル群一つ一つに対して、ファイルならunlink関数を使ってファイル削除を行い、ディレクトリなら再度remove_directory関数を呼び出します。

最後に17行目で、空になった指定ディレクトリをrmdir関数で削除します。

20-23行目で空ではないディレクトリを作成しています。

26行目で、remove_directory関数を用いて空ではないディレクトリを削除しています。

上記サンプルプログラムの実行結果は以下の通りです。

ファイル:test1/test2/test3を削除
ディレクトリ:test1/test2を削除
ディレクトリ:test1を削除

実行結果からも、空ではないディレクトリを削除できていることがわかると思います。

まとめ

この記事では、rmdir関数の使い方をサンプルプログラムを用いて解説しました。

rmdir関数は、空のディレクトリを削除する関数です。

また、空ではないディレクトリを削除する方法も合わせてサンプルプログラムを用いて解説しているので、ぜひこの機会にphpでディレクトリを削除する方法をマスターしてください!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次