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

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

黄舟
黄舟オリジナル
2017-08-11 13:16:30972ブラウズ

この記事では、主にフォルダーのコピー、削除、サイズの表示操作の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。