ホームページ > バックエンド開発 > PHPチュートリアル > PHP で再帰を使用してフォルダーのコピー、削除、サイズを表示する方法の例

PHP で再帰を使用してフォルダーのコピー、削除、サイズを表示する方法の例

黄舟
リリース: 2023-03-14 21:34:01
オリジナル
1053 人が閲覧しました

この記事では、主にフォルダーのコピー、削除、サイズの表示操作の PHP 再帰的実装を紹介します。PHP の再帰的アルゴリズムと PHP の一般的なフォルダー操作関数を組み合わせて、フォルダーのコピー、削除、表示、およびその他の関連する実装テクニックをフォームに実装します。必要な友人はそれを参照してください

この記事では、フォルダーのコピー、削除、サイズの表示操作を再帰的に実装する PHP の例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。

PHP は、filesize、copy、リンク解除などのファイル操作の関数を提供しますが、dirsize、copydir、rmdirs などのフォルダー操作の関数は提供しません (rmdir は実行できます)空のディレクトリのみを削除します)。したがって、これらの関数は手動でのみ作成できます。主なトリックは、直接解決できる最小の部分問題に分解されるまで、再帰によって問題を層ごとに分解することです。

フォルダーのサイズを確認してください

フォルダーにはサイズがないため、フォルダーのサイズは通常、フォルダー内のすべてのファイルの合計サイズを指します。したがって、フォルダーをレイヤーごとに検索し、各レイヤーに含まれるファイル サイズをカウントし、最後に結合する最も深いフォルダーから結果を返すだけで済みます。


/**
 * 文件夹大小
 * @param $path
 * @return int
 */
function dirsize($path)
{
  $size = 0;
  $handle = opendir($path);
  while (($item = readdir($handle)) !== false) {
    if ($item == '.' || $item == '..') continue;
    $_path = $path . '/' . $item;
    if (is_file($_path)) $size += filesize($_path);
    if (is_dir($_path)) $size += dirsize($_path);
  }
  closedir($handle);
  return $size;
}
ログイン後にコピー

フォルダーのコピー

ファイルをコピーすることはできますが、フォルダーをコピーすることはできません(ただし、フォルダーをコピーすることはできます)。元のフォルダーを生成する必要があります。同じディレクトリ構造で新しいフォルダーを作成し、元のディレクトリ構造に従ってファイルを新しいフォルダーにコピーします。再帰的な考え方によれば、最初に完全なディレクトリ構造を生成する必要はなく、現在のディレクトリを調べて、フォルダーが存在しないことを確認してフォルダーを作成し、対応するフォルダーにファイルをコピーするだけで済みます。 。


/**
 * 复制文件夹
 * @param $source
 * @param $dest
 */
function copydir($source, $dest)
{
  if (!file_exists($dest)) mkdir($dest);
  $handle = opendir($source);
  while (($item = readdir($handle)) !== false) {
    if ($item == '.' || $item == '..') continue;
    $_source = $source . '/' . $item;
    $_dest = $dest . '/' . $item;
    if (is_file($_source)) copy($_source, $_dest);
    if (is_dir($_source)) copydir($_source, $_dest);
  }
  closedir($handle);
}
ログイン後にコピー

フォルダーの削除

rmdirは空のフォルダーのみを削除できますが、unlinkはファイルを削除できます。そこで、フォルダーを削除するというアイデアが思いつきました。まず、リンク解除を通じてディレクトリ内のすべてのファイルを削除し、次に残りの空のフォルダーをrmdirを通じて削除します。再帰処理を使用するロジックは、現在のディレクトリ内のすべてのファイルとフォルダーを検索し、その中のすべてのファイルを削除し、次に次のレベルのディレクトリをたどってすべてのファイルを削除します...最後のレベルのディレクトリまで、その時点でフォルダー全体が削除されます。ファイルがありません (ただし、フォルダーはまだ存在します)。この時点で再帰が開始され、1 つのレベルに戻るたびに、このレベルの空のディレクトリがすべて削除され、最上位に戻ると再帰が終了します。 、すべてのファイルとディレクトリも削除されます。


/**
 * 删除文件夹
 * @param $path
 * @return bool
 */
function rmdirs($path)
{
  $handle = opendir($path);
  while (($item = readdir($handle)) !== false) {
    if ($item == '.' || $item == '..') continue;
    $_path = $path . '/' . $item;
    if (is_file($_path)) unlink($_path);
    if (is_dir($_path)) rmdirs($_path);
  }
  closedir($handle);
  return rmdir($path);
}
ログイン後にコピー

Cut Folder

rename は、ファイルとフォルダーの両方の名前を変更できる、PHP ファイルシステム関数の特殊なケースです。名前を変更したファイルに別のパスを渡すと、それは Cut 関数になります。これは、小さいながらも美しいファイル関数の例です。


りー

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート