Estoy trabajando en un proyecto un poco nuevo. Quería saber cuántos archivos hay en un directorio determinado.
<div id="header">
<?php
$dir = opendir('uploads/'); # This is the directory it will count from
$i = 0; # Integer starts at 0 before counting
# While false is not equal to the filedirectory
while (false !== ($file = readdir($dir))) {
if (!in_array($file, array('.', '..') and !is_dir($file)) $i++;
}
echo "There were $i files"; # Prints out how many were in the directory
?>
</div>
Esto es lo que tengo hasta ahora (de buscar). Sin embargo, ¿no aparece correctamente? He agregado algunas notas, así que siéntase libre de eliminarlas, son solo para que pueda entenderlas lo mejor que pueda.
Si necesita más información o siente que no he descrito esto lo suficiente, no dude en indicarlo.
count(scandir("uploads/")) - 2
ese bucle.Respuestas:
Simplemente puede hacer lo siguiente:
fuente
FilesystemIterator::SKIP_DOTS
ya que de todos modos es la predeterminada.Puede obtener el recuento de archivos así:
donde
"*"
está, puede cambiar eso a un tipo de archivo específico si lo desea"*.jpg"
o puede hacer varios tipos de archivo como este:la
GLOB_BRACE
bandera se expande {a, b, c} para que coincida con 'a', 'b' o 'c'fuente
__DIR__ .
antes"/path/to/dir/"
(__DIR__ . "/path/to/dir/"
)/path/to/dir
fallaría, porque primero/
significastarting from root dir
. Si lo hubierapath/to/dir
, entonces sí,__DIR__ . '/path/to/dir'
ayudaría (en este caso debe usar/
después de__DIR__
Prueba esto.
Sin contar el '.' y '..'.
fuente
$num_files = count($files) - 2;
¿ Quizás ? Porque.
así como..
.
y..
probar esto: $ files =array_diff( scandir("/dir"), array(".", "..") );
array_slice(scandir($directory),2)
Deberías :
fuente
La mejor respuesta en mi opinión:
fuente
Como yo también necesitaba esto, tenía curiosidad sobre qué alternativa era la más rápida.
Descubrí que, si todo lo que desea es un recuento de archivos, la solución de Baba es mucho más rápida que las demás. Me sorprendió bastante.
Pruébelo usted mismo:
Ejecución de prueba: (obviamente,
glob()
no cuenta los archivos de puntos)fuente
Demo de trabajo
fuente
Yo uso esto:
fuente
array_slice
funciona de manera similar a lasubstr
función, solo que funciona con matrices.Por ejemplo, esto eliminaría las dos primeras claves de matriz de la matriz:
Y si omite el primer parámetro, como en el primer ejemplo, la matriz no contendrá los dos primeros pares clave / valor * ('.' Y '..').
fuente
Quizás sea útil para alguien. En un sistema Windows, puede dejar que Windows haga el trabajo llamando al comando dir. Yo uso una ruta absoluta, como
E:/mydir/mysubdir
.fuente
Esto debería funcionar ingrese al directorio en dirname. y deja que suceda la magia.
fuente
fuente
Según la respuesta aceptada, aquí hay una manera de contar todos los archivos en un directorio RECURSIVAMENTE:
fuente
Aquí hay una función PHP Linux que es considerablemente rápida. Un poco sucio, ¡pero hace el trabajo!
$ dir - ruta al directorio
$ tipo - f, d o falso (por defecto)
f - devuelve solo el recuento de archivos
d - devuelve solo el recuento de carpetas
falso: devuelve el recuento total de archivos y carpetas
Puede modificarlo para que se ajuste a sus necesidades.
Tenga en cuenta que esto no funcionará en Windows.
fuente
simple agregar está hecho ...
fuente