開発メモ

開発用のメモです。

PHP で再帰的 コピーと削除

<?php
# 削除
function rmdirRecursive($path, $copyPath) {
    $itr = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS));
    foreach ($itr as $elem) {
        // 指定ディレクトリ以下からの絶対パス
        $file_name = str_replace($path, "", $elem -> getPathname());
        // Windows Dir Separator -> Linux Dir Separator
        $file_name = str_replace("\\", "/", $file_name);

        // コピー元・コピー先(削除対象)
        $src_file_name = str_replace("//", "/", $path . $file_name);
        $des_file_name = str_replace("//", "/", $copyPath . $file_name);
        $des_dir_name = dirname($des_file_name);
        unlink($des_file_name);
        foreach (glob($des_dir_name . "/*") as $value)
            continue 2;
        if ($count == 0)
            rmdir($des_dir_name);
    }
}

# コピー
function copyRecursive($path, $copyPath) {
    $itr = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS));
    foreach ($itr as $elem) {
        // 指定ディレクトリ以下からの絶対パス
        $file_name = str_replace($path, "", $elem -> getPathname());
        // Windows Dir Separator -> Linux Dir Separator
        $file_name = str_replace("\\", "/", $file_name);

        // コピー元・コピー先
        $src_file_name = str_replace("//", "/", $path . $file_name);
        $des_file_name = str_replace("//", "/", $copyPath . $file_name);
        $des_dir_name = dirname($des_file_name);

        if (file_exists($des_dir_name) == false)
            mkdir($des_dir_name, true);
        copy($src_file_name, $des_file_name);
    }
}
Twitter: @asahina_alice