Получить размеры каталогов на удаленном хосте с помощью PHP-скрипта - PullRequest
2 голосов
/ 27 августа 2008

Я ищу что-нибудь, что рекурсивно покажет мне размер каждой папки в моей основной папке.

Это сервер LAMP с CGI-Bin, так что почти любой скрипт PHP должен работать или все, что будет работать в CGI-Bin.

Моя хостинговая компания не предоставляет мне интерфейс для просмотра, какие папки занимают больше всего места. Я ничего не знаю в Интернете и сделал несколько поисков, но я не дал результатов.

Что-то, реализующее графики ( GD / ImageMagick ) будет лучше, но не обязательно.

Мой хост поддерживает только Perl в CGI-BIN.

Ответы [ 3 ]

6 голосов
/ 27 августа 2008

Странно, я нашел в Google много релевантных результатов и , этот , вероятно, самый полный.

Функция "getDirectorySize" будет игнорировать ссылку / ярлыки для файлов / каталогов. Функция "sizeFormat" будет суффикс размера с байты, КБ, МБ или ГБ соответственно.

код

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
1 голос
/ 28 августа 2008

Если у вас есть доступ к оболочке, вы можете запустить команду

$ du -h

или, возможно, используйте это, если PHP настроен на выполнение:

<?php $d = escapeshellcmd(dirname(__FILE__)); echo nl2br(`du -h $d`) ?>
0 голосов
/ 01 сентября 2016

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

        }
    }
}
?>
...