ホームページ >バックエンド開発 >PHPチュートリアル >PHPではフォルダのコピー、削除、表示サイズなどを再帰的に実装しています。

PHPではフォルダのコピー、削除、表示サイズなどを再帰的に実装しています。

墨辰丷
墨辰丷オリジナル
2018-05-18 14:56:571302ブラウズ

この記事では、主にフォルダーのコピー、削除、サイズの表示操作の 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;
}

フォルダーのコピー

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

/**
 * 复制文件夹
 * @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 関数になります。これは、小さいながらも美しいファイル関数の例です。

/**
 * @param $oldname 必需。规定要重命名的文件或目录。
 * @param $newname 必需。规定文件或目录的新名称。
 * @param $context 可选。规定文件句柄的环境。
 */
rename($oldname,$newname,$context);

関連する推奨事項:

php再帰関数ケースの使用法の詳細な説明

PHP (反復 +再帰) 無限レベル分類の詳細な説明

PHP配列再帰ソートを実装する手順の詳細な説明

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

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