ディレクトリの削除 : PHP

Pocket

PHPでディレクトリを削除するサンプル。

rmdir関数はディレクトリが空でないときは削除できない。
ファイルがあるときは削除し空にしてrmdirでディレクトリを削除する。

/*
 * ディレクトリ削除
 *
 * 中身のファイルを削除してからディレクトリを削除する。
 *
 * @param $dir 削除するディレクトリ。末尾/はなし
 * @return bool ディレクトリ削除に成功したらtrue, 失敗はfalse
 */
function removeDirectory($dir)
{

    // $dirが/で終わっている場合は/削除
    if (strripos($dir, '/') === mb_strlen($dir, 'UTF-8')) {
        $dir = rtrim($dir, '/');
    }
    // ディレクトリ内のファイルの削除
    foreach(glob($dir . '/*.*') as $file) {
        // ファイルの存在確認
        if (file_exists($file) === false) {
            return false;
        }
        // パーミッションエラー
        if (file_exists($file)
            && !is_writable($file)
            || !is_writable(dirname($dir))
        ) {
            return false;
        }
        // ファイル削除
        if(unlink($file) === false) {
            // 原因が特定できないエラー
            return false;
        }
    }
    // ディレクトリの存在確認
    if (file_exists($dir) === false) {
        return false;
    }
    // ディレクトリパーミッションエラー
    if (file_exists($dir)
        && !is_writable($dir)
    ) {
        return false;
    }
    // ディレクトリ削除
    if (rmdir($dir) === false) {
        // 原因が特定できないエラー
        return false;
    }

    return true;
}

» Gist

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。