lunes, 28 de febrero de 2011

Buscador de archivos SAMBA en php

Nunca he liberado nada, ésto tampoco es que merezca la pena liberarlo, pero quizás pueda resultarle útil a alguien el planteamiento. Se distribuye con licencia GPL, sin ninguna garantía pero puede gustarle a tu tía. Se descarga abajo.

Un par de veces me han cogido de primo para montar un servidor de archivos compartidos. Lo elegido era samba, porque eran redes heterogéneas con máquinas linux y máquinas W... Cuando estaba todo montado y parecía que funcionaba me puse a escuchar a ver que decía la gente.
- "Oye pepito cómo se llamaba el archivo donde estaban los contactos que hice y dónde estaba"
- "No me acuerdo, mira a ver por ahí"

Entonces probé a usar el buscador de archivos de gnome contra el directorio samba montado, y eso no iba bien, no sé por qué, lentitud, demasiados archivos... Lo común en ambos casos era un directorio compartido con unos 60-200 GB con total acceso para todos...

Y bueno, el caso es que hice una especie de buscador samba en php que se ejecutaba en el servidor y por lo tanto cualquier máquina de la red tenía acceso a la aplicación para buscar y abrir los archivos encontrados.


¿Cómo cojones se monta esta mierda que no interesa a nadie?
En principio, supongamos que el directorio compartido es /home/servidor/compartida y samba está ya configurado.
Tenemos instalado apache y php en el servidor.

# cd /var/www
# mkdir buscador
# cd buscador

Dentro del directorio buscador crearemos index.php

<html>
<head>
 <title>
  BUSCADOR DE ARCHIVOS SAMBA
 </title>

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

 <script type="text/javascript">

  function cargar(){

   document.buscador.abuscar.focus();  

  }

 </script>

 <style type="text/css">

  body {
   margin:50px 0px; 
   padding:0px;
   text-align:center;
  }
  a {
   color:#000000;
  }
  #Content {
   width:510px;
   margin:0px auto;
   padding:15px;
   text-align:left;
   border:1px dashed #5b197b;
   background-color:#ddc9ec;
  }
  #encuentros {
   text-align:left;
  }

 </style>


</head>

<body onload="cargar()">

<img src="logo.png">

<div id="content">

<form name="buscador" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">

 <input type="text" size="50" name="abuscar" value="<?php echo $_POST['abuscar'] ?>">

 <input type="submit" value="BUSCAR" name="boton">

</form>

</div>

<?php


#si ha pulsado el botón buscar, buscamos

if (isset($_POST['boton'])) {

 $abuscar = $_POST['abuscar'];

 if ($abuscar==NULL) {

         echo "Por favor introduzca algo que buscar";  
 }
 else {

  #COMIENZA LA BÚSQUEDA

  $comando="find /home/servidor/compartida -iname '*". $abuscar  ."*'";

  $salida=shell_exec($comando);

  if ($salida==NULL) {

   #no se han encontrado resultados

   echo "No se han encontrado resultados coincidentes a su búsqueda, Inténtelo de nuevo o salga a tomar el aire";

  }

  else{ 

   #pasar archivos encontrados a array

   #tabla bicolor por múltiplos de 2

   #enlace a cada archivo encontrado

   $encontradosarray = explode("\n", $salida);


   #eliminamos último array que se devuelve en blanco

   $ultimo=count($encontradosarray);

   unset($encontradosarray['$ultimo']);

   echo "<div id=\"encuentros\"><pre>";

   echo "<table align=\"center\">";

   $i=1;

   foreach($encontradosarray as $valor) {

           if($valor!=NULL) {

     if ($i % 2 == 0){

      echo "<tr>";

     }  

     else{

      echo "<tr bgcolor=\"#efefef\">";

     }

    

     echo "<td>";

      echo $i;

     echo "</td>";

   

     $valori = substr($valor,26);

    

     $valori1 = str_ireplace($abuscar,"<b>".$abuscar."</b>",$valori);


     echo "<td>";

      echo "<a href=\"samba/".$valori."\">".$valori1."</a><br>";

    

     echo "</td>";



     #Cerramos fila 

     echo "</tr>";


     $i++;

    }

   }

   echo "</pre></div>";

   echo "</table>"; 

  }

 }

}

?>

</body>

</html>


Una vez tenemos ya preparado nuestro buscador nos queda un último detalle, hacer accesibles los archivos encontrados desde el navegador.

# cd /var/www/buscador
# mkdir samba
# chmod 777 samba
# chown -R www-data:www-data /var/www/buscador

Y agregamos a /etc/fstab la siguiente línea
/home/servidor/compartida   /var/www/buscador/samba   none    bind  0  0

Reiniciamos y buscador funcionando.

2 comentarios:

  1. eo explicate vien como Y agregamos a /etc/fstab la siguiente línea

    ResponderEliminar
  2. que tan dificil es que alguién tipee «algo' & rm -rf /home/ & echo '»?

    Por lo menos hazle un regex para que solo pongan letras y numeros, que simplemente poniendo una comilla se rompe tu programa.

    ResponderEliminar