función recursiva para buscar archivos en php

Mar 10, 2010 3 Comments by

A veces es necesario buscar archivo recursivamente en un directorio, podemos utilizar herramientras como find o reinventar la rueda xD, el siguiente ejemplo es una función recursiva para la busqueda de archivos en PHP.

<?php
// Example recursive function that searches for files in a directory (including subdirectories recursively)
// by deerme.org

function search_files( $dir , &$files )
{
	if (is_dir($dir))
	{
		if ($gd = opendir($dir))
		{
        	while (($file = readdir($gd)) !== false)
			{
				if ( $file != '.' AND $file != '..'  )
				{
					// ¿ Dir or File ?
					if ( is_dir( $dir.'/'.$file ) )
					{
						search_files( $dir.'/'.$file , $files );
					}
					else
					{
						// Ready File
						if ( is_file( $dir.'/'.$file)  )
						{
							//$size = filesize( $dir.'/'.$file );
							//$md5 = md5_file( $dir.'/'.$file );
							$files[ dirname($dir.'/'.$file)."/".$file  ] = filemtime( $dir.'/'.$file  );
						}
					}
				}
        	}
			closedir($gd);
		}
	}
}

$files = array();
search_files("/var/tmp", $files );
print_r($files);
?>
PHP

About the author

Ingeniero en Informática, Oracle Certified Master Java EE 6 Enterprise Architect, Oracle Certified Professional Java Programmer. Experto en distintas ramas de la computación y otras "yerbas" xD. Si te gusto este post, sígueme en @deerme_org, escríbeme a info AT deerme.org o contactame por linkedin.

3 Responses to “función recursiva para buscar archivos en php”

  1. Josue says:

    Si creo un buscador es necesario poner exactamente el nombre del archivo para que lo pueda localizar con este script???

  2. deerme.org says:

    Josue

    Todo depende del buscador, lo más normal es buscar si el nombre del archivo contiene el patrón que estas buscando.

    Por lo tanto, la función debería tener otro parámetro más (patrón del archivo) y en el bloque donde verificamos que es un archivo real, puedes agregar una condición si el nombre del archivo cumple con el patrón, algo como preg_match(“/”.$filepattern.”/”, $dir.’/’.$file )

    De esta manera, el arreglo tendría al path de todos los archivos que cumplen la condición de busqueda.

  3. UDO says:

    como que me recomiendas, necesito hacer una busqueda de archivos, he usado glob() pero el detalle es que me devuelve la ruta del archivo no nada mas el nombre del archivo, ademas que dibuja el arreglo, intentaria con preg_match pero veo que hace lo mismo dibuja un arreglo, que me recomiendas para hacer mi busqueda pero solo obtener la lista de archivos encontrados sin sus rutas ni que dibuje ningun arreglo

Leave a Reply


+ 6 = thirteen