ホームページ > バックエンド開発 > PHPの問題 > PHPで空のフォルダーをクリアする

PHPで空のフォルダーをクリアする

PHPz
リリース: 2023-05-06 17:51:07
オリジナル
871 人が閲覧しました

時間が経過し、ファイルが継続的に操作されると、サーバー上に多数の空のフォルダーが蓄積される可能性があります。過剰なディスク領域を占有することはありませんが、ファイル システムのパフォーマンスとクリーン度に影響を与える可能性があります。したがって、これらの空のフォルダーを定期的にクリアする必要があります。

この記事では、PHP を使用して空のフォルダーをクリアするプログラムを作成する方法を紹介します。

  1. ディレクトリ リストの取得

まず、チェックおよびクリアする必要があるすべてのフォルダーをリストする必要があります。 PHP の scandir() 関数を使用して、ターゲット ディレクトリ内のすべてのファイルとフォルダーのリストを取得できます。

function getDirs($dir) {
    $dirs = array_diff(scandir($dir), array(".", ".."));
    return $dirs;
}
ログイン後にコピー

上記の関数は、ターゲット ディレクトリを走査し、現在のディレクトリ (「.」) と前のディレクトリ (「..」) を含まないフォルダー リストを返します。

  1. フォルダーが空かどうかを確認する

各フォルダーが空かどうかを確認する必要があります。 PHP の glob() 関数を使用すると、フォルダー内のすべてのファイルを取得し、フォルダー内に他のファイルがあるかどうかを確認できます。ファイルがない場合は空としてマークされ、後で削除できます。

function isEmpty($dir) {
    $isEmpty = true;
    $files = glob($dir.'/*');
    foreach ($files as $file) {
        if (is_dir($file)) {
            $isEmpty = false; // 如果有任何子文件夹则不是空文件夹
        }
        else {
            $isEmpty = false;
        }
    }
    return $isEmpty;
}
ログイン後にコピー

この関数は、フォルダーが空かどうかを示すブール値を返します。

  1. フォルダーを再帰的に走査する

フォルダーとそのサブフォルダーを再帰的に走査して、空のフォルダーをすべて見つける必要もあります。上で書いた getDirs() 関数を使用してフォルダーのリストを取得できます。フォルダーごとに、それが空かどうかを確認し、空の場合は空のフォルダー リストに追加します。

function getEmptyDirs($dir) {
    $emptyDirs = array();
    $dirs = getDirs($dir);
    foreach ($dirs as $d) {
        $subdir = $dir.'/'.$d;
        if (is_dir($subdir)) {
            if (isEmpty($subdir)) {
                $emptyDirs[] = $subdir;
            }
            else {
                $subdirs = getEmptyDirs($subdir);
                if (!empty($subdirs)) {
                    $emptyDirs = array_merge($emptyDirs, $subdirs);
                }
            }
        }
    }
    return $emptyDirs;
}
ログイン後にコピー

この関数は、フォルダーを再帰的に繰り返し、各サブフォルダーが空かどうかを確認することにより、すべての空のフォルダーのリストを返します。

  1. 空のフォルダーを削除する

最後に、空のフォルダーを削除する関数を作成する必要があります。 PHP の rmdir() 関数を使用してフォルダーを削除できます。ただし、この関数は空のディレクトリでのみ呼び出すことができるため、最初にフォルダーが空かどうかを確認する必要があります。そうでない場合は、フォルダーを削除できません。 unlink() 関数とループ ステートメントを使用して、空ではないディレクトリとその内容を削除することもできます。

function deleteEmptyDirs($dir) {
    $emptyDirs = getEmptyDirs($dir);
    foreach ($emptyDirs as $emptyDir) {
        if (is_dir($emptyDir)) {
            rmdir($emptyDir);
            echo "Deleted empty directory: ".$emptyDir."\n";
        }
    }
}
ログイン後にコピー

上記の関数は、削除された各空のフォルダーのパスを出力します。

  1. 全コード
function getDirs($dir) {
    $dirs = array_diff(scandir($dir), array(".", ".."));
    return $dirs;
}

function isEmpty($dir) {
    $isEmpty = true;
    $files = glob($dir.'/*');
    foreach ($files as $file) {
        if (is_dir($file)) {
            $isEmpty = false; // 如果有任何子文件夹则不是空文件夹
        }
        else {
            $isEmpty = false;
        }
    }
    return $isEmpty;
}

function getEmptyDirs($dir) {
    $emptyDirs = array();
    $dirs = getDirs($dir);
    foreach ($dirs as $d) {
        $subdir = $dir.'/'.$d;
        if (is_dir($subdir)) {
            if (isEmpty($subdir)) {
                $emptyDirs[] = $subdir;
            }
            else {
                $subdirs = getEmptyDirs($subdir);
                if (!empty($subdirs)) {
                    $emptyDirs = array_merge($emptyDirs, $subdirs);
                }
            }
        }
    }
    return $emptyDirs;
}

function deleteEmptyDirs($dir) {
    $emptyDirs = getEmptyDirs($dir);
    foreach ($emptyDirs as $emptyDir) {
        if (is_dir($emptyDir)) {
            rmdir($emptyDir);
            echo "Deleted empty directory: ".$emptyDir."\n";
        }
    }
}

// 用例
$targetDir = "/path/to/target/directory";
deleteEmptyDirs($targetDir);
ログイン後にコピー
  1. 結論

上記の方法を使用すると、サーバー内の空のフォルダーを定期的にクリーンアップできます。ファイル システム全体のパフォーマンスとクリーン度が向上します。さらに、空のフォルダーが蓄積してファイル システムのパフォーマンスに影響を与えないように、このスクリプトを定期的に実行するように設定できます。

以上がPHPで空のフォルダーをクリアするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート