una sort recorrer only files ejemplo carpeta buscar archivos archivo php file search glob

sort - recorrer archivos de una carpeta php



php glob-escanea en subcarpetas para un archivo (3)

Creo que esto es más semántico

$ReDirectory = new /RecursiveDirectoryIterator(''path/to/search''); $ReIterator = new /RecursiveIteratorIterator($ReDirectory ); while($ReIterator->valid()) { if ($ReIterator->getFilename() == $search && ! $ReIterator ->isDot()) { echo ''<a href="http://www.example.com/'' . $ReIterator->getFilename() . ''">'' . $search . ''</a>''; } $Rii->next(); }

Tengo un servidor con muchos archivos dentro de varias carpetas, subcarpetas y sub-subcarpetas.

Estoy intentando hacer una página search.php que se usaría para buscar en un servidor en un archivo específico. Si se encuentra el archivo, devuelva la ruta de ubicación para mostrar un enlace de descarga.

Esto es lo que tengo hasta ahora:

$root = $_SERVER[''DOCUMENT_ROOT'']; $search = "test.zip"; $found_files = glob("$root/*/test.zip"); $downloadlink = str_replace("$root/", "", $found_files[0]); if (!empty($downloadlink)) { echo "<a href=/"http://www.example.com/$downloadlink/">$search</a>"; }

La secuencia de comandos está funcionando perfectamente si el archivo está dentro de la raíz de mi nombre de dominio ... Ahora estoy tratando de encontrar una forma de hacerlo también analizar subcarpetas y sub-subcarpetas, pero estoy atrapado aquí.


Esto devuelve la ruta completa al archivo

function rsearch($folder, $pattern) { $iti = new RecursiveDirectoryIterator($folder); foreach(new RecursiveIteratorIterator($iti) as $file){ if(strpos($file , $pattern) !== false){ return $file; } } return false; }

llamar a la función:

$filepath = rsearch(''/home/directory/thisdir/'', "/findthisfile.jpg");

Y esto es devoluciones como:

/home/directory/thisdir/subdir/findthisfile.jpg

Puede mejorar esta función para encontrar varios archivos como todos los archivos jpeg:

function rsearch($folder, $pattern_array) { $return = array(); $iti = new RecursiveDirectoryIterator($folder); foreach(new RecursiveIteratorIterator($iti) as $file){ if (in_array(strtolower(array_pop(explode(''.'', $file))), $pattern_array)){ $return[] = $file; } } return $return; }

Esto puede llamar como:

$filepaths = rsearch(''/home/directory/thisdir/'', array(''jpeg'', ''jpg'') );

Ref: https://.com/a/1860417/219112


Hay 2 formas.

Use glob para hacer búsquedas recursivas:

<?php // Does not support flag GLOB_BRACE function rglob($pattern, $flags = 0) { $files = glob($pattern, $flags); foreach (glob(dirname($pattern).''/*'', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) { $files = array_merge($files, rglob($dir.''/''.basename($pattern), $flags)); } return $files; } ?>

Usar RecursiveDirectoryIterator

<?php function rsearch($folder, $pattern) { $dir = new RecursiveDirectoryIterator($folder); $ite = new RecursiveIteratorIterator($dir); $files = new RegexIterator($ite, $pattern, RegexIterator::GET_MATCH); $fileList = array(); foreach($files as $file) { $fileList = array_merge($fileList, $file); } return $fileList; } ?>

RecursiveDirectoryIterator viene con PHP5 mientras que glob es de PHP4. Ambos pueden hacer el trabajo, depende de usted.