PHP comprobar tamaño carpeta

E

Buenas a todos, me gustaria saber como comprobar el espacio usado en una carpeta...

Posible aplicacion: Creo una carpeta y voy metiendo archivos hasta que la suma de todos estos archivos sea igual a X...Entonces no se permite meter más; Y asi controlo a los usuarios y sus imagenes o archivos que suban.

El caso es que si uso filesize(carpeta) me da obviamente un tamaño que no es el de sus archivos en su interior; Y si uso el Disk-free-space o total space, me da el total del host, Y si los resto obtengo el tamaño usado, pero no en esa carpeta, sino en general... Por lo tanto, antes de usar MySql y trabajar insertando tamaños cada vez que suba algo, que es muy pesado, alguien sabe como conseguir lo que quiero?

Muchas gracias

BlisZ

intenta sumar lo que ocupa cada archivo y listo, no?

guner

Recursividad @ http://php.net/readdir

Lo tengo hecho, pero no te voy a pegar el codigo porque tendría que reiniciar.

guner

Va, venga.

<?php

function foldersize($file)
{
&nbsp;&nbsp;&nbsp;&nbsp;$size = 0;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if (is_dir($file)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$rdir = opendir($file);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ($cfile = readdir($rdir))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($cfile != '.' && $cfile != '..')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$size += foldersize($file . '/' . $cfile);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return filesize($file);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return $size;
}

E

Mil gracias

Por cierto... Como se usaria ese codigo? Estoy intentandolo pero me da un tamaño que no es el que deberia...

La verdad es que yo estoy empezando con php y esque no soy capaz de entender entero ese codigo... QUe variables necesitaria definir? File? Folder? ambas?
Si el codigo fuera sustituyendo los dos $folder por dos $file, al ver el codigo yo entenderia que comprueba si es un archivo o un directorio, y si es un directorio, suma el tamaño de lo que haya dentro... Pero el caso es que al existir esas variables $folder, me lio completamente y no se como llamar a la funcion.

Se que no tienes porque enseñarme nada ni darme clases pero te lo agradeceria la verdad... (el decirme como usarlo :P)

guner

He editado el código porque metí un par de pifias con los nombres que devolvía readdir.

Bueno, es una función, no tienes más que copiártela a una librería, incluirla cuando quieras leer el tamaño del directorio y llamar a la función.

funciona como filesize()

(tamaño en byes) foldersize(ruta a fichero ó carpeta);

y nada más ^^

E

jeje asias habiendo cambiado las dos lineas esas que estaban mas ya lo entiendo, esque no sabia como llamar a la funcion si tenia dos variables distintas, File y FOlder... :S

Gracias enserio :P

Usuarios habituales