PHP でファイルとフォルダーを削除するのは簡単ですが、フォルダー全体とその内容をすべて削除したい場合は、コードを記述するのにある程度の時間と労力を費やす必要があります。
PHP は、ファイルとフォルダーの操作を処理するための関数をいくつか提供します。その中で最も一般的に使用されるのは、「rmdir()」関数と「unlink()」関数です。 「rmdir()」関数は空のフォルダーを削除する関数ですが、そのフォルダーにファイルや他のフォルダーが含まれている場合はエラーが発生します。 「unlink()」関数はファイルを削除するために使用され、ファイルが存在しない場合はエラーをスローします。
ここで、空ではないフォルダーを削除し、その内容をすべて削除する必要があります。この目標を達成するには 2 つの方法があります。
方法 1: フォルダーとそのすべての内容を再帰的に削除する
フォルダーを再帰的に削除するというアイデアは、最初にフォルダー内のすべてのサブフォルダーとファイルを走査することです。この関数は、すべてのファイルとフォルダーが削除されるまで再帰的に呼び出されます。以下に例を示します:
function delete_directory($dir) { if (!file_exists($dir)) { return true; } if (!is_dir($dir)) { return unlink($dir); } foreach (scandir($dir) as $item) { if ($item == '.' || $item == '..') { continue; } if (!delete_directory($dir . DIRECTORY_SEPARATOR . $item)) { return false; } } return rmdir($dir); }
この関数のコードを説明します:
このメソッドでは、空のフォルダーを削除したくない場合でも、フォルダーの下にある空のフォルダーを含むすべてのコンテンツが削除されることに注意してください。
方法 2: 標準ライブラリ ファイル システム クラスを使用して、フォルダーとその内容を削除します。
もう 1 つの方法は、 PHP 標準ライブラリ」クラスは、フォルダーとそのすべての内容を簡単に削除できます。
function delete_directory($dir) { $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS); $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); foreach($files as $file) { if ($file->isDir()){ rmdir($file->getRealPath()); } else { unlink($file->getRealPath()); } } rmdir($dir); }
同様に、この関数は再帰を使用しますが、PHP 標準ライブラリの RecursiveDirectoryIterator クラスと RecursiveIteratorIterator クラスを使用して、フォルダー内のすべてのファイルとフォルダーを再帰的に走査します。最初のパラメータはフォルダ パスで、2 番目のパラメータはオプションで、フォルダ「.」と「..」をスキップすることを意味します。トラバーサル中にフォルダーが見つかった場合は、rmdir() 関数を使用してフォルダーが削除され、ファイルが見つかった場合は、unlink() 関数が使用されてファイルが削除されます。
概要
PHP でフォルダーとそのすべてのコンテンツを削除するには、再帰的削除と標準ライブラリ ファイル システム クラスを使用する 2 つの方法があります。どの方法を選択するかは、ニーズと個人の好みによって異なります。再帰関数を使用するときに注意すべき点は、すべてのフォルダーが削除されていることを確認する必要があることです。そうしないと、不要な問題が発生する可能性があります。標準ライブラリ ファイルシステム クラスを使用する場合、適切なオプションを使用して「.」および「..」フォルダーをスキップし、フォルダー パスを関数に渡す必要があります。
以上がPHPでフォルダーとそのすべてのコンテンツを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。