Rufen Sie die Verzeichnisgrößen auf einem Remote-Host mit einem PHP-Skript ab

StackOverflow https://stackoverflow.com/questions/29746

  •  09-06-2019
  •  | 
  •  

Frage

Ich suche nach etwas, das mir rekursiv die Größe jedes Ordners in meinem Hauptordner anzeigt.

Das ist ein LAMPE Server mit einer CGI-Bin, sodass fast jedes PHP-Skript oder alles, was in der CGI-Bin funktioniert, funktionieren sollte.

Mein Hosting-Unternehmen stellt mir keine Schnittstelle zur Verfügung, über die ich sehen kann, welche Ordner den meisten Speicherplatz beanspruchen.Ich weiß nichts im Internet und habe ein paar Suchanfragen durchgeführt, aber keine Ergebnisse gefunden.

Etwas, das Diagramme implementiert (GD/ImageMagick) wäre am besten, aber nicht erforderlich.

Mein Host unterstützt nur Perl in der CGI-BIN.

War es hilfreich?

Lösung

Seltsam, ich bin bei Google auf Folgendes gestoßen viele relevante Ergebnisse Und Dieses hier ist wahrscheinlich die vollständigste.

Die Funktion "getDirectorySize" ignoriert Link/Shorcuts zu Dateien/Verzeichnissen.Die Funktion "SizeFormat" sägt die Größe mit Bytes, KB, MB oder GB entsprechend.

Code

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";
    }

}

Verwendung

$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>"; 

Ausgabe

Details for the path : /httpd/html/pradeep/
Total size : 2.9 MB
No. of files : 196
No. of directories : 20

Andere Tipps

Wenn Sie Shell-Zugriff haben, können Sie den Befehl ausführen

$ du -h

oder vielleicht verwenden Sie dies, wenn PHP so konfiguriert ist, dass es die Ausführung erlaubt:

<?php $d = escapeshellcmd(dirname(__FILE__)); echo nl2br(`du -h $d`) ?>

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++;
            }

        }
    }
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top