txt - reemplazar archivo php
Devuelve el nĂºmero total de archivos dentro de una carpeta usando PHP (10)
El código antes mencionado
$count = count(glob("*.{jpg,png,gif,bmp}"));
es tu mejor opción, pero el bit {jpg, png, gif} solo funcionará si GLOB_BRACE
indicador GLOB_BRACE
al final:
$count = count(glob("*.{jpg,png,gif,bmp}", GLOB_BRACE));
¿Hay una manera mejor / más simple de encontrar la cantidad de imágenes en un directorio y darles salida a una variable?
function dirCount($dir) {
$x = 0;
while (($file = readdir($dir)) !== false) {
if (isImage($file)) {$x = $x + 1}
}
return $x;
}
Esto parece una manera tan larga de hacer esto, ¿no hay una manera más simple?
Nota: La función isImage () devuelve verdadero si el archivo es una imagen.
Consulte la Biblioteca PHP estándar (también conocida como SPL) para DirectoryIterator:
$dir = new DirectoryIterator(''/path/to/dir'');
foreach($dir as $file ){
$x += (isImage($file)) ? 1 : 0;
}
(Para su información hay una función no documentada llamada iterator_count () pero probablemente sea mejor no confiar en ella por ahora, me imagino. Y tendría que filtrar cosas invisibles como. Y ... de todos modos.)
Su respuesta parece tan simple como la puede obtener. No puedo pensar en una forma más corta de hacerlo en PHP o Perl.
Es posible que pueda ejecutar un comando system / exec que involucre a ls, wc y grep si está usando Linux dependiendo de qué tan complejo sea isImage ().
De todos modos, creo que lo que tienes es bastante suficiente. Solo debe escribir la función una vez.
podrías usar glob
...
$count = 0;
foreach (glob("*.*") as $file) {
if (isImage($file)) ++$count;
}
o, no estoy seguro de qué tan bien se adaptaría a tus necesidades, pero podrías hacer esto:
$count = count(glob("*.{jpg,png,gif,bmp}"));
También puede utilizar el SPL para filtrar el contenido de un DirectoryIterator
utilizando su función isImage
ampliando la clase abstracta FilterIterator
.
class ImageIterator extends FilterIterator {
public function __construct($path)
{
parent::__construct(new DirectoryIterator($path));
}
public function accept()
{
return isImage($this->getInnerIterator());
}
}
Luego puede usar iterator_count
(o implementar la interfaz Countable
y usar la función de count
nativo) para determinar el número de imágenes. Por ejemplo:
$images = new ImageIterator(''/path/to/images'');
printf(''Found %d images!'', iterator_count($images));
Usando este enfoque, dependiendo de cómo necesite usar este código, podría tener más sentido mover la función isImage
a la clase ImageIterator
para tener todo perfectamente envuelto en un solo lugar.
Esto le dará la cuenta de lo que está en su directorio. Dejaré la parte de contarle solo imágenes ya que estoy a punto de fallar aaasssllleeelppppppzzzzzzzzzzzzz.
iterator_count(new DirectoryIterator(''path/to/dir/''));
lo hago así:
$files = scandir($dir);
$x = count($files);
echo $x;
pero también cuenta el. y ...
Lo uso para devolver un conteo de TODOS los archivos en un directorio excepto. y ...
return count(glob("/path/to/file/[!/.]*"));
Aquí hay una buena lista de filtros glob para fines de coincidencia de archivos.
$nfiles = glob("/path/to/file/[!//.]*");
if ($nfiles !== FALSE){
return count($nfiles);
} else {
return 0;
}
Uso lo siguiente para obtener el conteo de todos los tipos de archivos en un directorio en Laravel
$dir = public_path(''img/'');
$files = glob($dir . ''*.*'');
if ( $files !== false )
{
$total_count = count( $files );
return $totalCount;
}
else
{
return 0;
}