Foros del Web » Programando para Internet » PHP »

Buscador de multiples archivos

Estas en el tema de Buscador de multiples archivos en el foro de PHP en Foros del Web. Que tal gente! Estoy haciendo un buscador de archivos en local (PC). Es para la búsqueda de muchos archivos a la vez. tengo dos variables ...
  #1 (permalink)  
Antiguo 17/02/2011, 19:10
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Pregunta Buscador de multiples archivos

Que tal gente!
Estoy haciendo un buscador de archivos en local (PC). Es para la búsqueda de muchos archivos a la vez.
tengo dos variables que recibo por POST, una es el string de la búsqueda, ej:

2525
3662
...

Y la otra es el path, ej: c:/misarchivos/
Utilizo el siguiente script, pero no logro hacer que haga lo que quiero, pues solo me devuelve una coincidencia, y si está es la del primer string que separo del string principal, es decir, 2525. Por lo que veo el segundo bucle solo se ejecuta una vez!
Alguien me podrá echar una mano?

Código PHP:
if($_SERVER['REQUEST_METHOD'] == "POST"){
    
    
// Tomamos los valores ingresados en el formulario
    
$buscar $_POST['consulta'];
    
$path $_POST['url']; 

    
//echo $path;
    
    // Si está vacío, lo informamos, sino realizamos la búsqueda
    
if(empty($buscar)){
        
        echo 
"No se ha ingresado una cadena a buscar";
        
    }else{
        
        
$saltoLinea chr(13);
        
        
// Obtengo los codigos numéricos separados  ej: "5698"
        
while($pos !== false){
            
            
// Separo el string numerico
            
$pos strpos($buscar$saltoLinea1); //determinamos la ubicación del caracter marca "chr(13)"
            
$cap substr($buscar0$pos); //extraemos el primer numero
            
$largoCadena $buscar $pos;
            
$buscar substr($buscar$pos$largoCadena);
            
            
//echo "Primer número: ".$cap."<br><br>";
            //echo "Nuevo string: ".$buscar."<br><br>";
            
                
if ($gestor opendir($path)){
                    
                    
//echo "Gestor de directorio: $gestor <br>\n";
                    //echo "Archivos: <br>\n";
                    
                    /* Esta es la forma correcta de iterar sobre el directorio. */
                    
while (false !== ($archivo readdir($gestor))){
                        
                        
//echo "$archivo <br>\n";
                        
                        
if (strrpos($archivo$cap)) { 
                           
                            echo 
"Archivo encontrado!!! <br>";
                            echo 
"$archivo<br>";  
                                
                        }else {  
                         
                            
//echo "No se encontraron coincidencias!";     
                            
                        
}
                        
                        
                    }
                    
                    
closedir($gestor);
                    
                }else{
                    
                    echo 
"No se encontraron coincidencias!"
                    
                }
            
        }
        
    }
    

__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #2 (permalink)  
Antiguo 17/02/2011, 19:35
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Respuesta: Buscador de multiples archivos

Hola

No tuve tiempo para analizar profundamente cuál es el matching que estás realizando sobre el nombre del archivo y el string a buscar, pero de todas formas modifique mi pequeño tips Función Recursiva para buscar archivos para que busque si el string aparece más de una vez en el nombre del archivo, de forma recursivo en todos los directorios hijos de la ruta principal.

Código PHP:
<?php
 
// Example recursive function that searches for files in a directory (including subdirectories recursively)
// by deerme.org
 
function search_files$dir , &$files $str )
{
    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 $str );
                    }
                    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  );
                            
if ( substr_count$file $str ) )
                            {
                                
$filesdirname($dir.'/'.$file)."/".$file  ] = filemtime$dir.'/'.$file  );
                            }
                            
                            
                        }
                    }
                }
            }
            
closedir($gd);
        }
    }
}

if ( 
$_REQUEST["path"] and $_REQUEST["search"]  ) 
{
    
$path_search $_REQUEST["path"];
    
$string_search $_REQUEST["search"];
    if ( 
is_dir$path_search ) )
    {
        
$files = array();
        
search_files($path_search$files $string_search );
        
print_r($files);
    }
}
?>
Ejemplo buscar todos los archivos de /var/www (recursivamente) que tenga a lo menos más de una vez el string "gato"

search.php?path=/var/www&search=gato


A si que solo la debes modificar para realizar el matching que quieres.

Saludos.

Saludos

Última edición por DeeR; 17/02/2011 a las 19:36 Razón: :P
  #3 (permalink)  
Antiguo 17/02/2011, 20:32
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Respuesta: Buscador de multiples archivos

Gracias DeeR por tu aporte!
Se ve muy interesante tu función, pero en principio no hace lo que yo estoy tratando de hacer, es decir, pasarle varios nombres de archivos (numéricos) para ser buscados en un directorio especifico. (Viéndola no se me ocurre como codificarla para mi propósito.)

En el caso de mi script los caracteres son pasados en forma de un string con saltos de líneas porque los extraigo de una columna de Excel. Como muestro en el script, los separo para realizar la búsqueda.
Tanto la separación del string original, como la búsqueda de archivos funcionan correctamente solas, pero no logro hacerlas funcionar en conjunto.
Si hago "echo" del string veo que el bucle lo recorre y separa por completo, separando cada string de 4 digitos para ser buscados por el siguiente bucle, pero el bucle de la búsqueda de coincidencias se ejecuta solo una vez.

Alguna idea de que estoy haciendo mal?
Desde ya muchas gracias!
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:

Etiquetas: multiples, buscadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:51.