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

William Shakespeare
リリース: 2023-03-24 15:04:02
オリジナル
1397 人が閲覧しました

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

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

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

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()関数を使用してフォルダーを削除します。

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

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

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

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)); }
ログイン後にコピー

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

これで、フォルダーの下のサブフォルダーを削除する方法が完了しました。上記 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 つの関数recursiveDirectoryDelete()deleteSubdirectory()を定義してからを呼び出します。 deleteSubdirectory()指定されたサブフォルダーを削除する関数。$parentDirectory$subDirectoryを独自のパスとサブフォルダー名に置き換えるだけです。

概要:

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

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!