2

メインフォルダー内の各フォルダーのサイズを再帰的に表示するものを探しています。

これは CGI-Bin を備えたLAMPサーバーであるため、ほとんどの PHP スクリプトが動作するか、CGI-Bin で動作するものなら何でも動作します。

私のホスティング会社は、どのフォルダが最も容量を消費しているかを確認するためのインターフェイスを提供していません。私はインターネット上で何も知らず、いくつかの検索を行いましたが、結果は得られませんでした.

グラフを実装するもの ( GD / ImageMagick ) が最適ですが、必須ではありません。

私のホストは、CGI-BIN で Perl のみをサポートしています。

4

3 に答える 3

6

奇妙なことに、私は Google で多くの関連する結果を見つけましたが、これはおそらく最も完全な結果です。

関数「getDirectorySize」は、ファイル/ディレクトリへのリンク/ショートカットを無視します。関数「sizeFormat」は、サイズに応じて、バイト、KB、MB、または GB の接尾辞を付けます。

コード

function getDirectorySize($path)
{
  $totalsize = 0;
  $totalcount = 0;
  $dircount = 0;
  if ($handle = opendir ($path))
  {
    while (false !== ($file = readdir($handle)))
    {
      $nextpath = $path . '/' . $file;
      if ($file != '.' && $file != '..' && !is_link ($nextpath))
      {
        if (is_dir ($nextpath))
        {
          $dircount++;
          $result = getDirectorySize($nextpath);
          $totalsize += $result['size'];
          $totalcount += $result['count'];
          $dircount += $result['dircount'];
        }
        elseif (is_file ($nextpath))
        {
          $totalsize += filesize ($nextpath);
          $totalcount++;
        }
      }
    }
  }
  closedir ($handle);
  $total['size'] = $totalsize;
  $total['count'] = $totalcount;
  $total['dircount'] = $dircount;
  return $total;
}

function sizeFormat($size)
{
    if($size<1024)
    {
        return $size." bytes";
    }
    else if($size<(1024*1024))
    {
        $size=round($size/1024,1);
        return $size." KB";
    }
    else if($size<(1024*1024*1024))
    {
        $size=round($size/(1024*1024),1);
        return $size." MB";
    }
    else
    {
        $size=round($size/(1024*1024*1024),1);
        return $size." GB";
    }

}

使用法

$path="/httpd/html/pradeep/";
$ar=getDirectorySize($path);

echo "<h4>Details for the path : $path</h4>";
echo "Total size : ".sizeFormat($ar['size'])."<br>";
echo "No. of files : ".$ar['count']."<br>";
echo "No. of directories : ".$ar['dircount']."<br>"; 

出力

Details for the path : /httpd/html/pradeep/
Total size : 2.9 MB
No. of files : 196
No. of directories : 20
于 2008-08-27T08:49:05.547 に答える
1

シェルにアクセスできる場合は、コマンドを実行できます

$ du -h

または、PHP が実行を許可するように構成されている場合は、おそらくこれを使用します。

<?php $d = escapeshellcmd(dirname(__FILE__)); echo nl2br(`du -h $d`) ?>
于 2008-08-28T09:38:50.867 に答える
0

number_files_and_size.php

<?php
if (isset($_POST["nivel"])) {
        $mostrar_hasta_nivel = $_POST["nivel"];
        $comenzar_nivel_inferior = $_POST["comenzar_nivel_inferior"];
        // $mostrar_hasta_nivel = 3;

        global $nivel_directorio_raiz;
        global $nivel_directorio;

        $path = dirname(__FILE__);
        if ($comenzar_nivel_inferior == "si") {
            $path = substr($path, 0, strrpos($path, "/"));
        }
        $nivel_directorio_raiz = count(explode("/", $path)) - 1;
        $numero_fila = 1;


        // Comienzo de Tabla
        echo "<table border='1' cellpadding='3' cellspacing='0'>";
        // Fila encabezado
        echo "<tr style='font-size: 100%; font-weight: bold;' bgcolor='#e2e2e2'><td></td><td>Ruta</td><td align='center'>Nivel</td><td align='right' style='color:#0000ff;'>Ficheros</td><td align='right'>Acumulado fich.</td><td align='right'>Directorio</td><td align='right' style='color:#0000ff;'>Tama&ntilde;o</td><td align='right'>Acumulado tama&ntilde;o</td></tr>";
        // Inicio Filas de datos
        echo "<tr>";

        //Función que se invoca a si misma de forma recursiva según recorre el directorio raiz ($path)
        FileCount($path, $mostrar_hasta_nivel, $nivel_directorio_raiz); 

        // Din Filas de datos
        echo "</tr>";
        // Fin de tabla
        echo "</table>";
        echo "<div style='font-size: 120%;'>";
        echo "<br>Total ficheros en la ruta <b><em>" . $path . ":</em> " . number_format($count,0,",",".") . "</b><br>";
        echo "Tama&ntilde;o total ficheros: <b>". number_format($acumulado_tamanho, 0,",",".") . " Kb.</b><br>";
        echo "</div>";

        echo "<div style='min-height: 60px;'></div>";

} else {
    ?>
    <form name="formulario" id="formulario" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <br /><h2>Informe del Alojamiento por directorios (N&uacute;mero de Archivos y Tama&ntilde;o)</h2>
        <br />Nivel de directorios a mostrar: <input type="text" name="nivel" id="nivel" value="3"><br /><br />
        <input type="checkbox" name="comenzar_nivel_inferior" value="si" checked="checked"/> Comenzar en nivel de directorio inmediatamente inferior a la ubicaci&oacute;n de este m&oacute;dulo PHP<br />(<?php echo dirname(__FILE__) ?>)<br /><br />
        <input type="submit" name="comenzar" id="comenzar" value="Comenzar proceso"><br /><br />
    </form>
    <?php
}




function FileCount($dir, $mostrar_hasta_nivel, $nivel_directorio_raiz){
    global $count;
    global $count_anterior;
    global $suma_tamanho;
    global $acumulado_tamanho;

    $arr=explode('&',$dir);
    foreach($arr as $val){
        global $ruta_actual;

        if(is_dir($val) && file_exists($val)){
            global $total_directorio;
            global $numero_fila;
            $total_directorio = 0;

            $ob=scandir($val);
            foreach($ob as $file){
                if($file=="."||$file==".."){
                    continue;
                }
                $file=$val."/".$file;

                if(is_file($file)){
                    $count++;
                    $suma_tamanho = $suma_tamanho + filesize($file)/1024;
                    $acumulado_tamanho = $acumulado_tamanho + filesize($file)/1024;
                    $total_directorio++;
                } elseif(is_dir($file)){
                    FileCount($file, $mostrar_hasta_nivel, $nivel_directorio_raiz);
                }
            }

            $nivel_directorio = count(explode("/", $val)) - 1;

            if ($nivel_directorio > $mostrar_hasta_nivel) {
            } else {
                $atributo_fila = (($numero_fila%2)==1 ? "background-color:#ffffff;" : "background-color:#f2f2f2;");
                echo "<tr style='".$atributo_fila."'><td>".$numero_fila."</td><td>".$val."&nbsp;&nbsp;&nbsp;&nbsp;</td><td align='center'>".$nivel_directorio."</td><td align='right' style='color:#0000ff;'>".number_format(($count - $count_anterior),0,",",".")."</td><td align='right'>".number_format($count,0,",",".")."</td><td align='right'>".number_format($total_directorio,0,",",".")."</td><td align='right' style='color:#0000ff;'>".number_format($suma_tamanho,0,",",".")." Kb.</td><td align='right'>".number_format($acumulado_tamanho,0,",",".")." Kb.</td></tr>";

                $count_anterior = $count;
                $suma_tamanho = 0;
                $numero_fila++;
            }

        }
    }
}
?>
于 2016-09-01T10:48:46.200 に答える