ホームページ > バックエンド開発 > PHPチュートリアル > PHP でディレクトリのサイズを効率的に計算するにはどうすればよいですか?

PHP でディレクトリのサイズを効率的に計算するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-29 13:41:20
オリジナル
721 人が閲覧しました

How to Efficiently Calculate a Directory's Size in PHP?

PHP を使用してディレクトリ サイズを決定する方法

サブディレクトリを含むディレクトリのサイズの計算は、ファイルを管理するための重要なタスクとなる場合がありますストレージとパフォーマンス。この記事では、最適化されたアプローチを使用して PHP でこれを実現する方法を説明します。

既存のメソッド

提供された PHP コード スニペットは、ディレクトリのサイズを次のように計算します。

function foldersize($path) {
  $total_size = 0;
  $files = scandir($path);

  foreach($files as $t) {
    if (is_dir(rtrim($path, '/') . '/' . $t)) {
      if ($t<>"." &amp;&amp; $t<>"..") {
          $size = foldersize(rtrim($path, '/') . '/' . $t);

          $total_size += $size;
      }
    } else {
      $size = filesize(rtrim($path, '/') . '/' . $t);
      $total_size += $size;
    }
  }
  return $total_size;
}
ログイン後にコピー

最適化

元のコードでは、不要な再帰関数呼び出しと冗長なファイル存在チェックによりパフォーマンスの問題が発生しました。以下の最適化された関数は、これらの問題に対処します。

function GetDirectorySize($path){
    $bytestotal = 0;
    $path = realpath($path);
    if($path!==false &amp;&amp; $path!='' &amp;&amp; file_exists($path)){
        foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object){
            $bytestotal += $object->getSize();
        }
    }
    return $bytestotal;
}
ログイン後にコピー

主な拡張機能には次のものが含まれます。

  • realpath を使用したパスの検証。
  • 反復前のパスの有効性とファイルの存在の確認。 .
  • スキップします。および .. ディレクトリ。
  • FilesystemIterator::SKIP_DOTS フラグを使用して、隠しディレクトリとファイルの処理を回避します。

使用例

使用最適化された関数:

$path = '/var/www/html/myproject';
$directorySize = GetDirectorySize($path);
echo "Size of '$path': " . format_bytes($directorySize);
ログイン後にコピー

このコードは次のことを決定します。指定されたディレクトリのサイズを調べ、結果を人間が読める形式で表示します。

以上がPHP でディレクトリのサイズを効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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