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

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

Aug 11, 2017 pm 01:16 PM
php 成し遂げる フォルダ

この記事では、主にフォルダーのコピー、削除、サイズの表示操作の 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles