PHPでディレクトリを削除

Subodh Poudel 2023年6月20日
  1. rmdir() 関数を使用して PHP で空のディレクトリを削除する
  2. PHP で再帰を使用して空でないディレクトリを削除する
PHPでディレクトリを削除

このチュートリアルでは、PHP でディレクトリを削除する 2つの方法について説明します。 ここでは、2つのシナリオを扱います。

1つ目は空のディレクトリを削除し、2つ目は空でないディレクトリを削除します。

rmdir() 関数を使用して PHP で空のディレクトリを削除する

rmdir() 関数を使用して、PHP で空のディレクトリを削除できます。 この関数は組み込みの PHP 関数です。

この関数は、ディレクトリ内にコンテンツがない場合にのみ、ディレクトリを削除します。 rmdir() 関数のパラメータとして、削除するディレクトリを指定できます。

この関数は、成功した場合は true を返し、それ以外の場合は false を返します。

ディレクトリを削除するには、ディレクトリが存在している必要があります。 mkdir() 関数を使用して、デモンストレーション用のディレクトリを作成します。

この関数は、パス名をパラメーターとして受け取ります。

たとえば、変数 $path を作成し、作成するディレクトリのパス名を格納します。 次に、$path をパラメータとして mkdir() 関数を使用します。

コード例:

$path =$_SERVER['DOCUMENT_ROOT']."/newFolder";
mkdir($path);

上記のコード例は、PHP ドキュメント ルートにディレクトリ newFolder を作成します。 $path 変数を出力すると、出力は Linux では次のようになります。

/var/www/html/newFolder

Windows では、出力は次のようになります。

C:\xampp\htdocs\newFolder

ディレクトリを作成したので、次は rmdir() を使用して削除します。

コード例:

if(is_dir($path)){
 rmdir($path);
 echo "the directory is deleted";
}

出力:

the directory is deleted

is_dir() 関数と rmdir() 関数を使用してディレクトリが存在するかどうかを確認し、ドキュメント ルートの myFolder ディレクトリを削除しました。

PHP で再帰を使用して空でないディレクトリを削除する

rmdir() は空のディレクトリのみを削除することがわかっているため、再帰機能と rmdir() を使用して、PHP で空でないディレクトリを削除する必要があります。 このメソッドでは、array_diff()scandir()unlink() などの PHP 関数をいくつか使用します。

array_diff() 関数は、複数の配列をパラメーターとして受け取り、最初のパラメーター配列にのみ存在する値を含む配列を返します。

scandir() 関数は、指定されたパスのすべてのファイルとディレクトリを一覧表示します。 unlink() 関数は、そのパラメーターで指定されたファイルを削除します。

ディレクトリの削除の背後にある概念は、最初にディレクトリ内のすべてのファイルとフォルダーを見つけることを再帰的に扱います。 次に、親ディレクトリ内のすべてのコンテンツをトラバースするループが作成されます。

再帰操作は、深さに達するまで、親ディレクトリ内の各フォルダーに適用されます。 深さで、ファイルは unlink() 関数を使用して削除されます。

プログラムはトラバースしたパスに戻り、すべてのファイルを削除します。 すべてのファイルを削除したら、最後に親ディレクトリを削除します。

ディレクトリ構造が次のようなシナリオを考えてみましょう。

testFolder
├── abc.png
├── abc.text
└── sub
 └── abc.jpeg

以下のコード例は、testFolder を再帰的に削除します。

コード例:

function deleteDirectory($path){

 $files = array_diff(scandir($path), array('.','..'));
 foreach($files as $file){
 (is_dir("$path/$file")) ? deleteDirectory("$path/$file") : unlink("$path/$file");
 }
 return rmdir($path);
}
$path =$_SERVER['DOCUMENT_ROOT']."/testFolder";
deleteDirectory($path);

ここで、関数 deleteDirectory() は、削除するディレクトリのパス名であるパラメーター $path を取るユーザー定義関数です。 testFolder は指定された $path です。

最初に、ネストされた scandir() 関数が実行されます。 testFolder ディレクトリのすべての内容を配列としてリストします。

Array ( [0] => . [1] => .. [2] => abc.png [3] => abc.text [4] => sub )

次に、array_diff() 関数を使用して . を削除しました。 および .. 上記の配列から。 1つのドットは現在のディレクトリを表し、2つのドットは親ディレクトリを表します。

その結果、$files 配列には abc.pngabc.text、および sub が含まれます。 次に、foreach() ループを使用して、これらのファイルとフォルダーを反復処理しました。

ループ内で、イテラブルがディレクトリかどうかを確認しました。 しかし、最初の 2つの項目はそうではありません。

そのため、それらは unlink() 関数を使用して削除されます。 3 番目の iterable sub は、条件を満たすディレクトリです。

そのため、関数 deleteDirectory() が再帰的に呼び出されます。 今回は、ディレクトリ内に 1つのファイルしかありません。

このファイルは、他のファイルと同様に unlink() 関数で削除されます。 最後に、実行はループを終了します。

次に rmdir() 関数で sub ディレクトリを削除します。 次に、再帰ツリーがトラバースバックし、親ディレクトリ testFolder が削除されます。

このように、PHP のさまざまな関数を使用してディレクトリを再帰的に削除する方法を学びました。

著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

関連記事 - PHP Directory