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.