subdirectorios - Búsqueda de archivos recursivos(PHP)
recursividad php arbol (6)
Estoy tratando de devolver los archivos en un directorio específico mediante una búsqueda recursiva. Logré esto con éxito, sin embargo, quiero agregar algunas líneas de código que me permitirán especificar ciertas extensiones que deseo que me devuelvan.
Por ejemplo, devolver solo archivos .jpg en el directorio.
Aquí está mi código,
<?php
$it = new RecursiveDirectoryIterator("L:/folder/folder/folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "<br/> /n";
}
?>
por favor, hágame saber qué puedo agregar al código anterior para lograr esto, gracias
Con respecto a la respuesta más votada: creé este código que usa menos funciones, solo 3, isset()
, array_flip()
, explode()
lugar de 4 funciones. Probé la respuesta más votada y fue más lenta que la mía. Sugiero que pruebes el mío:
$it = new RecursiveDirectoryIterator("L:/folder/folder/folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
$FILE = array_flip(explode(''.'', $file));
if (isset($FILE[''php'']) || isset($FILE[''jpg''])) {
echo $file. "<br />";
}
}
Debes crear un filtro:
class JpegOnlyFilter extends RecursiveFilterIterator
{
public function __construct($iterator)
{
parent::__construct($iterator);
}
public function accept()
{
return $this->current()->isFile() && preg_match("//.jpe?g$/ui", $this->getFilename());
}
public function __toString()
{
return $this->current()->getFilename();
}
}
$it = new RecursiveDirectoryIterator("L:/folder/folder/folder");
$it = new JpegOnlyFilter($it);
$it = new RecursiveIteratorIterator($it);
foreach ($it as $file)
...
Deje que PHP haga el trabajo:
$directory = new RecursiveDirectoryIterator(''path/to/directory/'');
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, ''//.jpe?g$/i'', RecursiveRegexIterator::GET_MATCH);
echo ''<pre>'';
print_r($regex);
Es posible que desee consultar esta página sobre el uso de glob () para una búsqueda similar:
Intente esto, utiliza una matriz de tipos de archivos permitidos y solo elimina el archivo si la extensión del archivo existe dentro de la matriz.
<?php
$it = new RecursiveDirectoryIterator("L:/folder/folder/folder");
$allowed=array("pdf","txt");
foreach(new RecursiveIteratorIterator($it) as $file) {
if(in_array(substr($file, strrpos($file, ''.'') + 1),$allowed)) {
echo $file . "<br/> /n";
}
}
?>
También puede encontrar que podría pasar una matriz de tipos de archivos permitidos a su clase RecursiveDirectoryIterator
y solo devolver los archivos que coincidan.
<?php
$it = new RecursiveDirectoryIterator("L:/folder/folder/folder");
$display = Array ( ''jpeg'', ''jpg'' );
foreach(new RecursiveIteratorIterator($it) as $file)
{
if (in_array(strtolower(array_pop(explode(''.'', $file))), $display))
echo $file . "<br/> /n";
}
?>