> 記事 > WordPress プログラミング マメ知識 > サーバーのフォルダサイズを一覧する方法

サーバーのフォルダサイズを一覧する方法

2016.05.06.(Fri)Masahiro Natori By.Masahiro Natori

こんにちは、masaです。

久しぶりにプログラムの話題を。。 あ、引かないで。

GITSでは、ドメインの購入、サーバーのホスティングサービスを提供しています。 GITS Web Hosting もちろん、弊社でも一部のドメインでこのホスティングサービスを使用しております。ただ、このサーバー上に複数のドメイン、サブドメインを登録しているため、最近ちょっと容量が気になっている状態です。(一応容量は無制限となっているのですが。)

Windowsであれば、パソコン上でフォルダを右クリックして「プロパティ」というメニューを選べば、そのフォルダのサイズ、含まれている、ファイル、フォルダのサイズなんかも事細かに表示することが出来るのですが、なかなかサーバー上のデータではそういうわけには行きません。

そこで、実際にサーバー上のどのフォルダがどの程度の容量を使用しているか、いくつかの方法で調べてみました。

Sponsored Link

方法1:FFFTPを利用する


ffftp
FFFTP (エフエフエフティーピー) プロジェクト日本語トップページ – OSDN


FFFTPは、日本発のFTPクライアントです。日本で仕事をしていた時にはこのプログラムを使っていました。このプログラムは当時からオープンソース(プログラムのソースが公開されている)プログラムだったので、自分仕様に便利メニューを追加したカスタマイズ版を作成して使っていました。開発終了後に脆弱性が見つかり、問題になったことがありましたが、その後、有志の方々が引き継いで開発が行われている状態です。最新のバージョンであれば大丈夫そうです。

ネットを調べていると、こちらのソフトウェアには、「フォルダの容量計算」というメニューがあると書かれていました。確かに昔使っていた時もそのようなメニューがあったと思うので、FFFTPをダウンロードしてセットアップしてみました。FFFTPはメニューから容量計算ができるのですが、このような機能がついているのは一部のFTPクライアントソフトのみで、私が普段利用しているFTPクライアントはこの機能はついていませんでした。

ffftp2
サーバーに接続し、「フォルダの容量計算」を実行すると、選択されたフォルダか、全フォルダかを選択することが出来ます。選択したフォルダのみにして、容量を計算させてみたのですが、すぐに値が返ってくるわけではなく、結構時間がかかりました。ディレクトリを一つ一つたどって検索し、一つ一つのファイルのサイズを足し上げているようで、フォルダが多くなれば多くなるほど結果が出るまでに時間が掛かるわけです。
例を挙げると、トータルで5M程度のhtmlで構成されたWebサイトの容量計算に30秒かかりました。WordPressがインストールされているWebサイトでは特にフォルダが多くなるので50MBを計測するのに18分もかかりました。このような時間のかかり具合だと、弊社で使用しているサーバーの全体のファイル構成はGBを超えている状態ですので、単純に考えて50MBの容量計算に18分かかるのであれば、5GB(100倍)の計測には18分×100=1800分(30時間)ほどかかる可能性もあります。というわけで、FFFTPで容量を求める方法はさっぱりとあきらめることにしました。

phpでフォルダの容量を求めてみる


ほかに方法はないかとGoogleで検索してみたところ、このページが引っかかってきました。

ディレクトリは一体何キロバイト?が一発で分かるPHP-ITかあさん

なるほど、phpでフォルダの容量が計算ができそうです。早速ソースをコピーして、確認してみました。

<?php
function dir_size($dir)
{
  $handle = opendir($dir);
  while ($file = readdir($handle)) {
    if ($file != '..' && $file != '.' && !is_dir($dir.'/'.$file)) {
      $mas += filesize($dir.'/'.$file);
    } else if (is_dir($dir.'/'.$file) && $file != '..' && $file != '.') {
      $mas += dir_size($dir.'/'.$file);
    }
  }
  return $mas;
}
echo dir_size('/home/www/example.com');
?>


これを適当なファイル名(ftp.php とか)で保存して、サーバーに転送します。’/home/www’ 部分に関しては借りているサーバーによって異なるので、ご利用中のレンタルサーバーの仕様に合わせてください。
ブラウザからアクセスしてみると・・

FTP_folder_size
出ました!
画面上にポツンと容量が出てるだけですが、これがわかればこっちのものです。
ちなみにこの 5435895 という値はバイト数を表しています。この値を1024で割るとKB(キロバイト)、さらにその値を1024で割ると、MB(メガバイト)の値になります。
この数字の場合、5.18MBになります。

さて、これがわかるのであればそれぞれのフォルダも一気に求められます。

phpで複数フォルダの容量を求めてみる


まずは簡単に並べて書いてみたのですが・・

<?php
function dir_size($dir)
{
  $handle = opendir($dir);
  while ($file = readdir($handle)) {
    if ($file != '..' && $file != '.' && !is_dir($dir.'/'.$file)) {
      $mas += filesize($dir.'/'.$file);
    } else if (is_dir($dir.'/'.$file) && $file != '..' && $file != '.') {
      $mas += dir_size($dir.'/'.$file);
    }
  }
  return $mas;
}

echo ('/home/www/example.com');
echo dir_size('/home/www/example.com');
echo ('<br/>');

echo ('/home/www/testtest.com');
echo dir_size('/home/www/testtest.com');
echo ('<br/>');

} 

?>


・・・これではスマートではないですね。いまはとりあえず調査対象のフォルダを2つだけ(example.com, testtest.com)書きましたが、実際に調査をしたいフォルダは20個以上あります。これをあと20個以上延々書き足していくのは手間ですし、美しくありません。

そこで、サーバーのフォルダ一覧を自動で取得して、フォルダごとに自動的に容量を計算するようにプログラムを改造してみました。phpでは、scandirという関数でフォルダの一覧が可能です。

PHP: scandir – Manual

scandirでフォルダの一覧を取得し、その一覧ごとに、名前、バイト数、キロバイト数、メガバイト数、ギガバイト数をタブで区切って表示するようにしてみました。もちろん、フォルダごとに改行も入れてます。

<?php
function dir_size($dir)
{
  $handle = opendir($dir);
  while ($file = readdir($handle)) {
    if ($file != '..' && $file != '.' && !is_dir($dir.'/'.$file)) {
      $mas += filesize($dir.'/'.$file);
    } else if (is_dir($dir.'/'.$file) && $file != '..' && $file != '.') {
      $mas += dir_size($dir.'/'.$file);
    }
  }
  return $mas;
}

$dir    = '/home/www';
$cdir = scandir($dir);
foreach ($cdir as $key => $value)
{
  if (!in_array($value,array(".","..")))
  {
	echo($value);
	echo("\t");
	$size = dir_size('/home/www/'.$value);
	echo($size);
	echo("\t");
	echo($size/1024);
	echo("\t");
	echo($size/1024/1024);
	echo("\t");
	echo($size/1024/1024/1024);
	echo("\n");
  }
} 
?>


‘/home/www’ の下にあるフォルダを一覧し、そのフォルダごとに容量を求め、名前、容量、KB,MB,GBを表示するようにしてあります。 dir_size()を何度も呼び出すと、その都度値が計算されることになるので、一度だけ計算して$sizeに値を代入し、その後で、1024で割り算した値を表示するようにしています。

上記のソースを先ほどと同じようにphpファイルとして保存し、フォルダ容量を調査したいサイトにアップロードし、ブラウザからそのURLにアクセスしてみます。30秒くらいは掛かりましたが、予定通りの結果が返ってきました。区切りをタブ(\t)にしているので、画面上ではつながってしまうのですが、ソースはきちんと区切られているので、右クリックからソースを表示してコピーすると、タブがそのままクリップボードにコピーされます。タブで区切られたテキストはExcelにペーストするとセルに分けられた状態でペーストされるので便利なのです。

ソースをコピーして、textエディタに貼った状態
allwebsite_size
最終的にExcelで作表したらこんな感じです。これならどのドメインが容量を食っているか一目でわかりますね。いくつかのフォルダで予定以上に容量を食っているところがあるので、これから調整していきます。

websize_excel
何かのお役に立てば幸いです。

Masahiro Natori

Masahiro Natori
こんにちはMasaです。39歳の時に16年勤めた会社を辞め、2013年4月に家族で日本からパースに引っ越してきました。2013年6月よりGITSに勤務。2014年1月にGITSのサポートでProgrammerとして457ビザを取得。 趣味は音楽を聴くことと、部屋のレイアウトを変えること、ドライブすること。
  • facebook
  • twitter