PHP : 再帰的にディレクトリを削除する


PHPで意外に使いそうなのに用意されていない関数があります。

その1つに、ディレクトリの削除があります。

ディレクトリを削除するには、rmdir関数を使いますが、
知っている限り(PHP5.3.0時点)、ディレクトリの中にファイル等がある場合には削除できません。

Linuxの場合には、
system(“rm -rf $path”);
でも削除できますが、Windowsでは当然動かなく、delコマンドに変える必要があります。

そこで、PHPの関数で実装してみると、以下のようになりました。

<?php

    /**
     * 再帰的にディレクトリを削除する。
     * @param string $dir ディレクトリ名(フルパス)
     */
    function removeDir( $dir ) {

        $cnt = 0;

        $handle = opendir($dir);
        if (!$handle) {
            return ;
        }

        while (false !== ($item = readdir($handle))) {
            if ($item === "." || $item === "..") {
                continue;
            }

            $path = $dir . DIRECTORY_SEPARATOR . $item;

            if (is_dir($path)) {
                // 再帰的に削除
                $cnt = $cnt + removeDir($path);
            }
            else {
                // ファイルを削除
                unlink($path);
            }
        }
        closedir($handle);

        // ディレクトリを削除
        if (!rmdir($dir)) {
            return ;
        }
    }
?>
The following two tabs change content below.

TAIRA

Sofrware Engineer.

Comments are closed.