Foros del Web » Programando para Internet » PHP »

busqueda de archivos

Estas en el tema de busqueda de archivos en el foro de PHP en Foros del Web. que tal, tengo este script que me deja ver una lista de todas las imagenes de una carpeta en mi servidor Código PHP: <?php $dir  ...
  #1 (permalink)  
Antiguo 19/06/2009, 11:40
 
Fecha de Ingreso: mayo-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
busqueda de archivos

que tal, tengo este script que me deja ver una lista de todas las imagenes de una carpeta en mi servidor
Código PHP:
<?php
$dir 
"../assets/notas/minis/";

// Abrir un directorio conocido, y proceder a leer sus contenidos
if (is_dir($dir)) {
   if (
$gd opendir($dir)) {
    
$tabla "";
       while ((
$archivo readdir($gd)) !== false) {
           
$tabla '<tr><td bgcolor="'.$color.'"><a href="'.$dir.$archivo.'" target ="_blank">'.$archivo.'</a></td></tr>'.$tabla;
           if (
$color == "#ffffff") {$color "#ffffcc";} else {$color "#ffffff";}
       }
       
closedir($gd);
    echo 
'<table>'.$tabla."</table>";
   }
}
?>
la cuestion esque ya son demasiadas y ademas de tardar un tiempo exagerado en publicarlas es muy dificil encontrar una determinada imagen.

me gustaria saber como poder incluir un formulario de busqueda que me muestre la lista de archivos con lo que se haya buscado por ejemplo buscar, "tema" y que me muestre tema.jpg, mitema04.jpg etc etc etc

he investigado mucho pero no encuentro una solucion, con excepcion de un archivo que dice hacerlo pero nunca me encuentra nada jeje.
ayuda por favor.
  #2 (permalink)  
Antiguo 19/06/2009, 11:56
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: busqueda de archivos

Para ello te recomiendo usar comandos de linux

Por ejemplo para buscar una imagen llamada myphoto.gif a través de la shell de linux tendrías que usar el comando find.

Ejemplo: find <ruta> -name <nombre_fichero>

Código:
find ./images -name 'myphoto.gif'
Esto combiando con la funcion exec() te puede servir para capturar la salida devuelta por find.

Saludos!
  #3 (permalink)  
Antiguo 19/06/2009, 12:00
 
Fecha de Ingreso: mayo-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: busqueda de archivos

la cuestion es que jamas buscare una imagen con un nombre completo definido como por ejempolo myphoto.gif lo mas seguro esque busque palabras como familia o entrevista y el bsucador me deberia mostrar todos los archivos con coincidencias y que contengan esa palabra no , por decir si buscara .gif me mostraria la lista completa de todos lso gifs
  #4 (permalink)  
Antiguo 19/06/2009, 12:15
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: busqueda de archivos

Cita:
Iniciado por AlexAguila Ver Mensaje
la cuestion es que jamas buscare una imagen con un nombre completo definido como por ejempolo myphoto.gif lo mas seguro esque busque palabras como familia o entrevista y el bsucador me deberia mostrar todos los archivos con coincidencias y que contengan esa palabra no , por decir si buscara .gif me mostraria la lista completa de todos lso gifs
Combinalo con grep...

find <ruta> | grep <patron_de_busqueda>

Código:
find ./images | grep 'myphoto'
Saludos!
  #5 (permalink)  
Antiguo 20/06/2009, 09:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: busqueda de archivos

oye pues ya tengo un buen rato buscando informacion al respecto pero no encuentro la manera de hacerlo funcionar, ademas no he podido averiguar como usar el patron de bsuqueda desde un formulario recuerda que entrando al sitio lo que debo ver es un campo de textocomo en google poner ahi mi busqueda y que me muestre la lista de archivos de determinada carpeta en el server con la coincidencia de el patron de busqueda
  #6 (permalink)  
Antiguo 20/06/2009, 11:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Pregunta

encontre este script que necesito para buscar archivos en el server.

Código PHP:
<?
$my_server 
"http://".getenv("SERVER_NAME").":".getenv("SERVER_PORT");
$my_root getenv("DOCUMENT_ROOT");
$s_dirs = array("/search","/search/dir2"); // Which directories should be searched ("/dir1","/dir2","/dir1/subdir2","/Verzeichniss2/Unterverzeichniss2")? --> $s_dirs = array(""); searches the entire server
$s_skip = array("..","."); // Which files/dirs do you like to skip?
$s_files "html|htm|HTM|HTML|php3|php4|php|txt";
$min_chars "3"
$max_chars "30"
$default_val "Searchphrase";
$limit_hits = array("5","10","25","50","100");
$message_1 "Invalid Searchterm!"
$message_2 "Please enter at least '$min_chars', highest '$max_chars' characters."
$message_3"Your searchresult for:";
$message_4 "Sorry, no hits."
$message_5 "results";
$message_6 "Match case"; /
$no_title "Untitled"
$limit_extracts ""
$byte_size "51200";

ini_set("error_reporting""2047"); 

function 
search_form($_GET$limit_hits$default_val$message_5$message_6$PHP_SELF) {
    @
$keyword=$_GET['keyword'];
    @
$case=$_GET['case'];
    @
$limit=$_GET['limit'];
    echo
    
"<form action=\"$PHP_SELF\" method=\"GET\">\n",
    
"<input type=\"hidden\" value=\"SEARCH\" name=\"action\">\n",
    
"<input type=\"text\" name=\"keyword\" class=\"text\" size=\"10\"  maxlength=\"30\" value=\"";
    if(!
$keyword)
        echo 
"$default_val";
    else
        echo 
str_replace("&amp;","&",htmlentities($keyword));
    echo 
"\" ";
    echo 
"onFocus=\" if (value == '";
    if(!
$keyword)
        echo 
"$default_val"
    else
        echo 
str_replace("&amp;","&",htmlentities($keyword));
    echo 
"') {value=''}\" onBlur=\"if (value == '') {value='";
    if(!
$keyword)
        echo 
"$default_val"
    else
        echo 
str_replace("&amp;","&",htmlentities($keyword));
    echo 
"'}\"> ";
    
$j=count($limit_hits);
    if(
$j==1)
        echo 
"<input type=\"hidden\" value=\"".$limit_hits[0]."\" name=\"limit\">";
    elseif(
$j>1) {
        echo
        
"<select name=\"limit\" class=\"select\">\n";
        for(
$i=0;$i<$j;$i++) {
            echo 
"<option value=\"".$limit_hits[$i]."\"";
            if(
$limit==$limit_hits[$i])
                echo 
"SELECTED";
            echo 
">".$limit_hits[$i]." $message_5</option>\n";
            }
        echo 
"</select> ";
        }
    echo
    
"<input type=\"submit\" value=\"OK\" class=\"button\">\n",
    
"<br>\n",
    
"<span class=\"checkbox\">$message_6</span> <input type=\"checkbox\" name=\"case\" value=\"true\" class=\"checkbox\"";
    if(
$case)
        echo 
" CHECKED";
    echo
    
">\n",
    
"<br>\n",
    
"<a href=\"http://www.terraserver.de/\" class=\"ts\" target=\"_blank\">Powered by terraserver.de/search</a>",
    
"</form>\n";
    }

function 
search_headline($_GET$message_3) {
    @
$keyword=$_GET['keyword'];
    @
$action=$_GET['action'];
    if(
$action == "SEARCH"// Volltextsuche
        
echo "<h1 class=\"result\">$message_3 '<i>".htmlentities(stripslashes($keyword))."</i>'</h1>";
    }

function 
search_error($_GET$min_chars$max_chars$message_1$message_2$limit_hits) {
    global 
$_GET;
    @
$keyword=$_GET['keyword'];
    @
$action=$_GET['action'];
    @
$limit=$_GET['limit'];
    if(
$action == "SEARCH") { // Volltextsuche
        
if(strlen($keyword)<$min_chars||strlen($keyword)>$max_chars||!in_array ($limit$limit_hits)) { // Ist die Anfrage in Ordnung (min. '$min_chars' Zeichen, max. '$max_chars' Zeichen)?
            
echo "<p class=\"result\"><b>$message_1</b><br>$message_2</p>";
            
$_GET['action'] = "ERROR"// Suche abbrechen
            
}
        }
    }

function 
search_dir($my_server$my_root$s_dirs$s_files$s_skip$message_1$message_2$no_title$limit_extracts$byte_size$_GET) {
    global 
$count_hits;
    @
$keyword=$_GET['keyword'];
    @
$action=$_GET['action'];
    @
$limit=$_GET['limit'];
    @
$case=$_GET['case'];
    if(
$action == "SEARCH") { 
        foreach(
$s_dirs as $dir) { 
            
$handle = @opendir($dir);
            while(
$file = @readdir($handle)) {
                if(
in_array($file$s_skip)) { 
                    continue;
                    }
                elseif(
$count_hits>=$limit) {
                    break; 
                    }
                elseif(
is_dir($dir."/".$file)) { 
                    
$s_dirs = array("$dir/$file");
                    
search_dir($my_server$my_root$s_dirs$s_files$s_skip$message_1$message_2$no_title$limit_extracts$byte_size$_GET); /
                    }
                elseif(
preg_match("/($s_files)$/i"$file)) { 
                    
$fd=fopen($dir."/".$file,"r");
                    
$text=fread($fd$byte_size); 
                    
$keyword_html htmlentities($keyword);
                    if(
$case) { 
                        
$do=strstr($text$keyword)||strstr($text$keyword_html);
                        }
                    else {
                        
$do=stristr($text$keyword)||stristr($text$keyword_html);
                        }
                    if(
$do)    {
                        
$count_hits++; // Treffer zaehlen
                        
if(preg_match_all("=<title[^>]*>(.*)</title>=siU"$text$titel)) { // Generierung des Link-Textets aus <title>...</title>
                            
if(!$titel[1][0]) // <title></title> ist leer...
                                
$link_title=$no_title// ...also $no_title
                            
else
                                
$link_title=$titel[1][0];  // <title>...</title> vorhanden...
                            
}
                        else {
                            
$link_title=$no_title
                            }
                        echo 
"<a href=\"$my_server$dir/$file\" target=\"_self\" class=\"result\">$count_hits.  $link_title</a><br>"// Ausgabe des Links
                        
$auszug strip_tags($text);
                        
$keyword preg_quote($keyword); // unescapen
                        
$keyword str_replace("/","\/","$keyword");
                        
$keyword_html preg_quote($keyword_html); // unescapen
                        
$keyword_html str_replace("/","\/","$keyword_html");
                        echo 
"<span class=\"extract\">";
                        if(
preg_match_all("/((\s\S*){0,3})($keyword|$keyword_html)((\s?\S*){0,3})/i"$auszug$matchPREG_SET_ORDER)); {
                            if(!
$limit_extracts)
                                
$number=count($match);
                            else
                                
$number=$limit_extracts;
                            for (
$h=0;$h<$number;$h++) { // Kein Limit angegeben also alle Vorkommen ausgeben
                                
if (!empty($match[$h][3]))
                                    
printf("<i><b>..</b> %s<b>%s</b>%s <b>..</b></i>"$match[$h][1], $match[$h][3], $match[$h][4]);
                                }
                            }
                        echo 
"</span><br><br>";
                        
flush();
                        }
                    
fclose($fd);
                    }
                }
              @
closedir($handle);
            }
        }
    }


// search_no_hits(): Ausgabe 'keine Treffer' bei der Suche
function search_no_hits($_GET$count_hits$message_4) {
    @
$action=$_GET['action'];
    if(
$action == "SEARCH" && $count_hits<1// Volltextsuche, kein Treffer
        
echo "<p class=\"result\">$message_4</p>";
    }

?>

<html>
<head>
    <title></title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#03629C" vlink="#03629C" alink="#9D9D9D">
<table border="0" cellspacing="1" cellpadding="0" bgcolor="#03629C">
  <tr align="left" valign="top">
    <td>
      <table border="0" cellspacing="0" cellpadding="3" bgcolor="#FFFFFF">
        <tr align="left" valign="top">
          <td>
<?
// search_form(): Gibt das Suchformular aus
search_form($_GET$limit_hits$default_val$message_5$message_6$PHP_SELF);
?>
          </td>
        </tr>
      </table>    
    </td>
  </tr>
</table>
<?
// search_headline(): Ueberschrift Suchergebnisse
search_headline($_GET$message_3);
// search_error(): Auf Fehler testen und Suchfehler anzeigen
search_error($_GET$min_chars$max_chars$message_1$message_2$limit_hits);
// search_dir(): Volltextsuche in Verzeichnissen (siehe config.php4)
search_dir($my_server$my_root$s_dirs$s_files$s_skip$message_1$message_2$no_title$limit_extracts$byte_size$_GET);
// search_no_hits(): Ausgabe 'keine Treffer' bei der Suche
search_no_hits($_GET$count_hits$message_4);
?>
</body>
</html>
y aun no puedo hacer que funcione recibo un error con el PHP_SELF y lo arreglo al ponerle $_SERVER['PHP_SELF'] la cuestion esque en las primeras lineas hay una funcion que es esta function search_form($_GET, $limit_hits, $default_val, $message_5, $message_6, $PHP_SELF) { y ahi se la pasa enviandome este error Parse error: syntax error, unexpected '[', expecting ')'

ayuda!

perdonen este scripot no hace lo que quiero no bsuca archivos en una carpeta sino texto dentro de archivos

Última edición por GatorV; 21/06/2009 a las 10:10
  #7 (permalink)  
Antiguo 20/06/2009, 11:15
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: que esta fallando en esto?

para qué necesitas buscar archivos en tu server, mejor dicho, qué archivos piensas buscar, acaso es para la búsqueda de cualquier archivo?, o tiene que ver con tu web, por que si es el primer caso, cada sistema operativo tiene por defecto programas para la búsqueda de archivos.
si es el segundo caso, lo mejor es que crees tu propio buscador, este, aun que no he elido el código por completo, parece ser para búsquedas avanzadas.

si nos dices cuál es tu objetivo tal vez te pueda ayudar
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #8 (permalink)  
Antiguo 20/06/2009, 11:25
 
Fecha de Ingreso: mayo-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: que esta fallando en esto?

mira es un sistema de noticias, y todas las imagenes que se suben se almacenan en una carperta, no solo imagenes tambien videos sonidos etc
y la idea esque desde el administrador tengas una seccion para buscar archivos
entras y escojes buscar fotos para lo cual existe una carpeta dodne van todas las fotos y buscas por ejemplo el nombre de una ciudad, y te deberia mostrar

*ciudad*.* de dicha carpeta

porque?puesporque a veces esnecesario conseguir una foto rapidamente y navegar entre miles y miles por ftp o como actualmente lo hago que es listando todos toma una eternidad

solo quisiera saber si es posible me dijiero nque con el comando grep de linux pewro no se como incluirlo en codigo php y sacar la busqueda desde un campo de texto.
  #9 (permalink)  
Antiguo 20/06/2009, 11:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: que esta fallando en esto?

esto es l oque me dijieron que hiciera

find ./images | grep 'myphoto'

pero no tengo ni idea de como incluirlo en el codigo o como capturar el patron de bsuqueda que en este caso es myphoto desde un formulario mira este es el codigo que uso actualmente pero ya no funciona debido a la enorme cantidad de archivos en el servidor

<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#FF6600"><h3 class="Estilo1">Ver Fotos y Videos en el sistema </h3> </td>
</tr>
<tr>
<td> <p align="left" class="Estilo2"><br>&nbsp;&nbsp;&nbsp;&nbsp;
Para guardar presionar boton derecho y "Guardar Destino Como"
<table width="550" border="1" cellpadding="0" cellspacing="0" bordercolor="#999999">
<tr>
<th bgcolor="#990000"><span class="Estilo1">MINIS</span></th>
<th bgcolor="#990000"><span class="Estilo1">NORMALES</span></th>
<th bgcolor="#990000"><span class="Estilo1">VIDEO</span></th>
<th bgcolor="#990000"><span class="Estilo1">AUDIO</span></th>
</tr>
<tr>
<th valign="top" bgcolor="#FFFFFF"><?php
$dir = "../assets/notas/minis/";

// Abrir un directorio conocido, y proceder a leer sus contenidos
if (is_dir($dir)) {
if ($gd = opendir($dir)) {
$tabla = "";
while (($archivo = readdir($gd)) !== false) {
$tabla = '<tr><td bgcolor="'.$color.'"><a href="'.$dir.$archivo.'" target ="_blank">'.$archivo.'</a></td></tr>'.$tabla;
if ($color == "#ffffff") {$color = "#ffffcc";} else {$color = "#ffffff";}
}
closedir($gd);
echo '<table>'.$tabla."</table>";
}
}
?></th>
<th valign="top" bgcolor="#FFFFFF"><?php
$dir = "../assets/notas/fotos/";

// Abrir un directorio conocido, y proceder a leer sus contenidos
if (is_dir($dir)) {
if ($gd = opendir($dir)) {
$tabla = "";
while (($archivo = readdir($gd)) !== false) {
$tabla = '<tr><td bgcolor="'.$color.'"><a href="'.$dir.$archivo.'" target ="_blank">'.$archivo.'</a></td></tr>'.$tabla;
if ($color == "#ffffff") {$color = "#ffffcc";} else {$color = "#ffffff";}
}
closedir($gd);
echo '<table>'.$tabla."</table>";
}
}
?></th>
<th valign="top" bgcolor="#FFFFFF"><?php
$dir = "../assets/notas/video/";

// Abrir un directorio conocido, y proceder a leer sus contenidos
if (is_dir($dir)) {
if ($gd = opendir($dir)) {
$tabla = "";
while (($archivo = readdir($gd)) !== false) {
$tabla = '<tr><td bgcolor="'.$color.'"><a href="'.$dir.$archivo.'" target ="_blank">'.$archivo.'</a></td></tr>'.$tabla;
if ($color == "#ffffff") {$color = "#ffffcc";} else {$color = "#ffffff";}
}
closedir($gd);
echo '<table>'.$tabla."</table>";
}
}
?></th>
<th valign="top" bgcolor="#FFFFFF"><?php
$dir = "../assets/notas/audio/";

// Abrir un directorio conocido, y proceder a leer sus contenidos
if (is_dir($dir)) {
if ($gd = opendir($dir)) {
$tabla = "";
while (($archivo = readdir($gd)) !== false) {
$tabla = '<tr><td bgcolor="'.$color.'"><a href="'.$dir.$archivo.'" target ="_blank">'.$archivo.'</a></td></tr>'.$tabla;
if ($color == "#ffffff") {$color = "#ffffcc";} else {$color = "#ffffff";}
}
closedir($gd);
echo '<table>'.$tabla."</table>";
}
}
?></th>
</tr>
</table>
</p></td>
</tr>
</table>
  #10 (permalink)  
Antiguo 21/06/2009, 09:05
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: que esta fallando en esto?

mira:
lo que te recomiendo es que guardes una descripción y ubicación del archivo en la base de datos, así puedes tener total acceso a tu sistema de archivos y la descripción de cada uno, para el nombre del archivo, no te recomiendo que lo guardes con el original, sino con su hash en md5, no me parece muy correcto el echo de tener el nombre original de un archivo en alguna carpeta de mi web, por lo menos este tipo de archivos, que "entran y salen".
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #11 (permalink)  
Antiguo 21/06/2009, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: busqueda de archivos

Temas unidos, por favor NO dupliques temas.
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 21:31.