ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してフォルダーの下のサブフォルダーを削除する方法

PHPを使用してフォルダーの下のサブフォルダーを削除する方法

PHPz
PHPzオリジナル
2023-03-24 14:54:351454ブラウズ

PHP 開発者の場合、フォルダーの下にあるフォルダーを削除する必要が生じる場合があります。 PHP にはファイルやフォルダーを削除するための組み込み関数が提供されていますが、フォルダーを個別に削除するための機能は提供されていません。今回はPHPを使ってフォルダー配下のサブフォルダーを削除する方法を紹介します。

フォルダーの下のサブフォルダーを削除することは、特に古くて役に立たないファイルをクリーンアップする必要がある場合に、比較的一般的な操作です。 PHP では、rmdir() 関数を使用してフォルダーを削除できます。この関数は、フォルダーへのパスをパラメーターとして受け取り、そのフォルダーの削除を試みます。ただし、削除できるのは空のフォルダーのみで、空でないフォルダーは削除できません。

PHP で空ではないフォルダーを削除する操作は比較的複雑です。フォルダーを正常に削除するには、まずフォルダー内のすべてのファイルとサブフォルダーを削除し、エラーが発生しないことを確認する必要があるためです。幸いなことに、PHP には recursiveDirectoryDe​​lete() という関数が用意されており、フォルダー内のすべてのファイルとサブフォルダーを簡単に削除できます。その実装プロセスは次のとおりです:

function recursiveDirectoryDelete($directory){
    if(!is_dir($directory)){
        throw new InvalidArgumentException(sprintf('%s is not a directory', $directory));
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::CHILD_FIRST
    );

    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }

    rmdir($directory);
    return true;
}

上記のコードでは、まず、渡されたパラメータがディレクトリであるかどうかを確認します。ディレクトリではない場合、InvalidArgument 例外がスローされます。

次に、RecursiveDirectoryIterator クラスと RecursiveIteratorIterator クラスを使用して、ディレクトリ内のすべてのサブディレクトリとファイルを反復処理します。ここでは、無限ループを避けるために . および .. ディレクトリをスキップする SKIP_DOTS 定数も渡します。

次に、現在のファイルまたはディレクトリのタイプを確認し、rmdir() または unlink() 関数を使用してそれ自体を削除します。最後に、rmdir() 関数を使用してフォルダーを削除します。

上記のコードでは、recursiveDirectoryDe​​lete() 関数を呼び出して、フォルダーの下にあるすべてのファイルとサブフォルダーを削除できます。

しかし、フォルダーの下のサブフォルダーを削除する方法というニーズをまだ実現していません。

PHP では、フォルダーの下のサブフォルダーを削除する必要がある場合、まず recursiveDirectoryDe​​lete() 関数を呼び出してサブフォルダーを削除し、次にその親フォルダーを削除します。

function deleteSubdirectory($parentDirectory, $subDirectory)
{
    $subDirectoryPath = sprintf('%s/%s', $parentDirectory, $subDirectory);
    if (is_dir($subDirectoryPath)) {
        recursiveDirectoryDelete($subDirectoryPath);
        return true;
    }
    throw new InvalidArgumentException(sprintf('%s is not a directory under %s', $subDirectory, $parentDirectory)); 
}

上記のコードでは、最初にサブフォルダーのフル パスを構築し、それがディレクトリであるかどうかを確認します。存在する場合は、recursiveDirectoryDe​​lete() 関数を呼び出して削除します。それ以外の場合は、例外がスローされます。

これで、フォルダーの下のサブフォルダーを削除する方法が完了しました。上記 2 つの関数を組み合わせると、この関数を PHP で簡単に実装できます。完全な例を次に示します。

function recursiveDirectoryDelete($directory){
    if(!is_dir($directory)){
        throw new InvalidArgumentException(sprintf('%s is not a directory', $directory));
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::CHILD_FIRST
    );

    foreach($files as $file) {
        if ($file->isDir()){
            rmdir($file->getRealPath());
        } else {
            unlink($file->getRealPath());
        }
    }

    rmdir($directory);
    return true;
}

function deleteSubdirectory($parentDirectory, $subDirectory)
{
    $subDirectoryPath = sprintf('%s/%s', $parentDirectory, $subDirectory);
    if (is_dir($subDirectoryPath)) {
        recursiveDirectoryDelete($subDirectoryPath);
        return true;
    }
    throw new InvalidArgumentException(sprintf('%s is not a directory under %s', $subDirectory, $parentDirectory)); 
}

$parentDirectory = '/path/to/directory';
$subDirectory = 'subdirectory';

deleteSubdirectory($parentDirectory, $subDirectory);

上の例では、最初に 2 つの関数 recursiveDirectoryDe​​lete()deleteSubdirectory() を定義してから を呼び出します。 deleteSubdirectory() 指定されたサブフォルダーを削除する関数。 $parentDirectory$subDirectory を独自のパスとサブフォルダー名に置き換えるだけです。

概要:

フォルダーの下のサブフォルダーの削除は、PHP では比較的一般的な操作です。 recursiveDirectoryDe​​lete() 関数を呼び出すことですべてのファイルとサブフォルダーを削除でき、指定したサブフォルダーを削除するには deleteSubdirectory() 関数を使用します。この記事があなたのお役に立てば幸いです。

以上がPHPを使用してフォルダーの下のサブフォルダーを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。