問題の背景
ユーザーがファイルを保存および削除できるマルチメディア Web アプリケーションがあります。保存されたファイルは、さまざまなアプリケーション全体の機能に使用されます。
ファイルが保存されると、ディレクトリ ツリーの奥深く (通常は 6 ~ 9 フォルダの深さ) に配置されます。ファイルは、ファイル構造を見て管理者/スーパーユーザーが簡単に区別できるように、また既存の手動システムと一致するように、非常に深いレベルに配置されています。
たとえば、 「
UploadedAssets
」はルート ディレクトリであり、次のフォルダー構造を含めることができます
。
blah_only\item1\image02.png \ith
\sp\cookery\ckpe\interactives\timestep\blah_only\item2\image03.png \ith\
sp\cookery\abcd\interactives\timestep\blahblah\item1\image66.png
- 最初の 5 つの名前は、ユーザーが (動的なドロップダウン メニューから) 選択可能で、それぞれ約 20 ~ 25 のオプションから選択できます。
- 最後の 3 つは、ユーザーの入力 (カテゴリ、タイトルなど) によって異なります。これは、テキスト入力フィールドを使用してユーザーから受け取ります。これらは、1 つまたは最大 4 つのディレクトリにすることができます。
- 最後のディレクトリ「item1」には 1 つ以上のファイルを含めることができますが、サブディレクトリは含めることができません
- 最後のディレクトリ (item1) を除く各ディレクトリには、他のサブディレクトリを含めることができます
- ファイルを削除/削除すると、明らかにプログラムはファイルの場所のフルパスを知っています。
可能なディレクトリ名オプションの数が原因で、テスト フェーズであっても、ルートの「UploadedAssets」ディレクトリが爆発し、空の未使用のディレクトリとデッド ブランチがたくさんあります。
私の質問は
ユーザーがディレクトリから 1 つまたは複数のファイルを削除すると (例: item1のimage01.png )、
- 削除されたファイルからツリーをたどり(まっすぐな親にのみ移動)、空の場合は親ノードを削除するにはどうすればよいですか。
- ディレクトリの1つに他の子/ファイルがある場合は削除中に、そのディレクトリを削除せずにプロセスを終了します。
- 事前に定義されたルートディレクトリで停止する削除中 OR
- nディレクトリ レベルまで上がったら停止
たとえば、上記のディレクトリ構造の例では、
ユーザーがimage01.pngを削除した場合、 item1とblahblahディレクトリを削除する必要があります。ユーザーがimage02.png
を
削除した場合、ユーザーがimage66.pngを削除した
場合、親の item1 ディレクトリのみを削除し、すべての親を削除する必要があります。 abcdを含むディレクトリ
私の試み/研究
PHPのrmdirを使用して単一のディレクトリを削除する方法を知っています。しかし、問題を解決するために再帰的に使用する方法を考えることができませんでした。
私は次のことについて頭を悩ませようとしましたが、それらのいずれかが私の問題 PHP に適合するかどうかわかりません: ディレクトリ内のすべてのファイルのリンクを解除し、そのディレクトリを削除します。