開発 PHP

【PHP】ディレクトリ削除

2013年11月9日

PHPの処理にてとあるディレクトリを削除したかったのでメモ

ファイルおよびディレクトリの読込関数は以下の通り

  • opendir:ディレクトリを開く関数
  • readdir:ディレクトリ内容を読む関数(opendirの後に使う)
  • glob:指定パス内のファイルを読み込む(パターンマッチ可能)

ファイルおよびディレクトリ削除の関数は以下の通り

  • unlink:ファイルを削除する関数
  • rmdir:ディレクトリを削除する関数

ディレクトリ削除する方法はrmdirだけで使えたらいいですが、中にファイルがあるとエラーになるようです。

ファイルを削除するにはunlinkを使うのでrmdir+unlinkを併用で使います。

フォルダ内に複数ファイルおよびディレクトリが入っていると一つ一つ削除しないといけない為、再帰処理ができるように

opendir+readdirかglobを使ってディレクトリ内のファイル一覧を取得します。

opendir+readdirの場合

<?php
$dir = "./test";
if ($handle = opendir("$dir")) {
    while (false !== ($item = readdir($handle))) {
        if ($item != "." && $item != "..") {
            if (is_dir("$dir/$item")) {
                remove_directory("$dir/$item");
            } else {
                unlink("$dir/$item");
            }
        }
    }
    closedir($handle);
    rmdir($dir);
}

globの場合

<?php

$dir = "./test";
rmdir($dir);

function rmdir($dir)
{
    foreach (glob($dir . '/*') as $file) {
        if (is_dir($file))
            rrmdir($file);
        else
            unlink($file);
    }
    rmdir($dir);
}

単純削除だけならglobよりもopendir+readdirのほうが早いそうです。

globはパターンマッチができるので*.jpgの削除に向いてるかもです。

参考

PHPでファイル等が内包されたディレクトリ(フォルダ)を削除

ファイル検索する際はopendirが早い

-開発, PHP
-, , , ,