2007年05月17日

サーバ内大きいファイル上位50件リストアップ

借りているレンタルサーバの残り容量が少なくなっていました。
どのファイルがかさばっているのだろう、と調べたくなったのですが、すぐには出てきません。

Windows用のフリーウェアでは、円グラフにして分かりやすくどのフォルダが大きくなっているのかを図示してくれるようなものがあったなぁと思いつつ、ちょっと探してみたのですが、サーバサイドではなさそうでした。

で、オープンソースのものを見ているより、自分で書いてしまったほうが早そうだ、ということで下記のようなスクリプトにしてみました。

再帰でディレクトリ内のファイルサイズを調べてくるのは下記のスクリプトを参考に。
http://www.the-art-of-web.com/php/dirlist/

スクリプトを置いたフォルダと、その下のサブフォルダを再帰的に検索し、ファイルサイズの大きい上位50件をリストアップするようにしています。

簡単なスクリプトなので、いろいろいじるともっと便利になりそうですね。グラフと組み合わせたり、ディレクトリの移動などをできるようにしたら、なかなか使い物になるかな……。


<?PHP

  
function getFileList($dir$recurse=false)
  {
    
# array to hold return value
    
$retval = array();

    
# add trailing slash if missing
    
if(substr($dir, -1) != "/"$dir .= "/";

    
# open pointer to directory and read list of files
    
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");

    while(
false !== ($entry $d->read())) {

      
# skip hidden files
      
if($entry[0] == ".") continue;

      if(
is_dir("$dir$entry")) {
        
$retval[] = array(
          
"name" => "$dir$entry/",
          
//"type" => filetype("$dir$entry"),
          
"size" => 0,
          
//"lastmod" => filemtime("$dir$entry")
        
);

        if(
$recurse && is_readable("$dir$entry/")) {
          
$retval array_merge($retvalgetFileList("$dir$entry/"true));
        }

      } elseif(
is_readable("$dir$entry")) {
        
$retval[] = array(
          
"name" => "$dir$entry",
          
//"type" => mime_content_type("$dir$entry"),
          
"size" => filesize("$dir$entry"),
          
//"lastmod" => filemtime("$dir$entry")
        
);

      }

    }

    
$d->close();
    return 
$retval;

  }

  function 
myCmp($var1$var2){

    
$value1 $var1['size'];
    
$value2 $var2['size'];

    if(
$value1 == $value2){ return 0;}

    return (
$value1 $value2) ? 1:-1;

  }

  
$dirlist getFileList(dirname($_SERVER['SCRIPT_FILENAME']), true);
  
usort($dirlist"myCmp");
 
  echo 
"<table border=1>\n";
  echo 
"<tr><th>Name</th><th>Size</th></tr>\n";

  for(
$i=0;$i<50;$i++) {
    echo 
"<tr>\n";
    echo 
"<td>{$dirlist[$i]['name']}</td>\n";
    echo 
"<td>{$dirlist[$i]['size']}</td>\n";
    echo 
"</tr>\n";
  }

  echo 
"</table>\n\n";
?>
ラベル:PHP サーバ
posted by SDozono at 19:39| 東京 🌁| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
WebとCTI、VoIP技術の高みを目指して - 技術者の24時間
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。