• Publicidad

Error en el código del buscador

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Error en el código del buscador

Notapor xevi » 2006-02-19 14:32 @647

Hola de nuevo, me puse con el buscador y no me da resultados, chequeando a ver qué podía ser, vi algo en el tutorial sobre el buscador que pudiera estar incorrecto. A ver, les copio la línea de cádigo:

return unless($_ =~ /\.htm(l)?/i);

¿El interrogante no debería ir dentro del paréntesis? ¿y la /i está bien sola?

A ver el tutorial es el del buscador: http://perlenespanol.com/archives-tut/000138.html

Y me fijé en que la misma línea de código está puesta de tres maneras diferentes:

1 return unless($_ =~ /\.htm(l)?/i);

2 return unless($_ =~ /\.htm(l?)/i);

3 return unless ($_ =~ /\.htm(l?)$/i);

No creo que los tres sean validos, ¿no? Bueno, decir que si eso es para que solo detecte las extensiones .htm y/o .html en mi caso sería .php, ¿Debería colocar algo así?

return unless ($_ =~ /\.php/$i);

Bueno, he probado varias maneras. Algunas me dan error y otros me dice los resultados de la búsqueda, con la pega de que no hay resultados.

Saludos, y espero no molestar mucho, a ver si consigo hacerlo funcionar, aunque eso de que de 0 resultados en la búsqueda me da mala espina, no podía ser tan fácil...
xevi
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-02-19 05:16 @261

Publicidad

Re: Error en el código del buscador

Notapor explorer » 2006-02-19 15:12 @675

return unless ($_ =~ /\.php$/);

El '$' final indica final de la cadena de caracteres. Así que estamos mirando que la variable '$_' contenga una cadena de caracteres terminado en '.php'. Si no ocurre eso (unless) entonces retornamos (return).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor xevi » 2006-02-19 16:30 @729

Gracias, explorer, así se fue el error que había, bueno, al menos según el editor que me bajé había un error y ya no sale, lo que ahora tendré que descubrir es porque no salen resultados al realizar la búsqueda, no sé si entendí el sistema, la idea es que busca en todos los directorios, ¿no? Nada de bases de datos, bueno, si el tutorial se ve bien simple, así que no se que debe fallar.

Ya hoy di algún paso. Espero mañana averiguar más y ahora que ya funciona podré ir probando.

Buenas noches.

Y muchas gracias de nuevo.
xevi
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-02-19 05:16 @261

Notapor kidd » 2006-02-19 22:21 @973

Hola.

Ya vi el error dentro del tutorial, lo corregiré lo antes posible, y el código correcto es:

Código: Seleccionar todo
return unless($_ =~ /\.htm(l)?/i);



SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Buscando qué hago mal

Notapor xevi » 2006-02-20 07:23 @349

Siento abusar.

Aquí está el código del formulario
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <form action="http://www.tomamas.com/cgi-bin/buscador.cgi" method="post">
  2. <input type="text" name="query" size="50">
  3. <input type="submit">
  4. </form>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

El código de buscador.cgi
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use File::Find;
  5. use CGI qw(:standard);
  6. my $query = param("query");
  7.  
  8. #VARS DE CONFIGURACIÓN
  9.  
  10. #LUGAR DONDE QUIERES BUSCAR. NO USES EL / FINAL
  11. my $root_dir = '/home/admin/mainwebsite_html';
  12.  
  13. #URL DEL DIRECTORIO QUE VAS A BUSCAR. SIN EL / FINAL
  14. my $url_dir = 'http://tomamas.com';
  15.  
  16. print header();
  17. print start_html();
  18. print "\n<p>Para la búsqueda $query, estos resultados se encontraron:</p>\n<ol>\n";
  19.  
  20. undef $/;
  21.  
  22. find(
  23.     sub {
  24.         return if ( $_ =~ /^\./ );
  25.         return unless ( $_ =~ /\.php/i );
  26.         stat $File::Find::name;
  27.         return if -d;
  28.         return unless -r;
  29.  
  30.         open( FILE, "< $File::Find::name" ) or return;
  31.         my $string = <FILE>;
  32.         close(FILE);
  33.  
  34.         return unless ( $string =~ /\Q$query\E/i );
  35.         my $page_title = $_;
  36.  
  37.         if ( $string =~ /<title>(.*?)<\/title>/is ) {
  38.             $page_title = $1;
  39.         }
  40.  
  41.         my $int_dir = $File::Find::dir;
  42.         $int_dir =~ s/$root_dir//i;
  43.         my $url = $url_dir . $int_dir . "/" . $_;
  44.  
  45.         print "<li><a href=\"$url\">$page_title</a></li>\n";
  46.     },
  47.     $root_dir
  48. );
  49.  
  50. print "</ol>\n";
  51.  
  52. print end_html();
  53.  
  54. exit(1);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

A tener en cuenta
  • he copiado el código del tutorial
  • he cambiado correctamente las rutas en cuanto a www. decir que si no se pone es para que busque también en los subdominios, ¿no? En mi caso no tengo ¿podría poner www.?
  • uso páginas en PHP pero ya cambié la linea de código, no sé si eso sea problema
    Sintáxis: [ Descargar ] [ Ocultar ]
    1. return unless ($_ =~ /\.php/i); 

  • ¿he de cambiar algo en el servidor? o que no tenga instalado algo, igual por mi inexperiencia me salto lo más básico
  • el buscador imagino que puede estar en cualquier página, ¿no?

Resultados de la búsqueda dibujo.

Para la búsqueda dibujo, estos resultados se encontraron:


O sea, nada.
xevi
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-02-19 05:16 @261

Notapor explorer » 2006-02-20 07:59 @374

¿Hay algún fichero con la palabra dibujo dentro del directorio /home/admin/mainwebsite_html?
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

la web trata de dibujo

Notapor xevi » 2006-02-20 08:42 @404

A ver, toda la web está llena de palabras como 'dibujo' - 'dibujos'.

Si no voy muy perdido, el directorio al que te refieres es el que contiene todos los PHP y más directorios, y si no he entendido mal la función del buscador y de poner esa ruta es la de buscar en toda la web.

Puedes ver que la web contiene varias palabras como dibujo:

http://www.tomamas.com/dibujo.php

De todas maneras probé un montón de palabras.

El buscador lo tengo aquí:

http://www.tomamas.com/_pruebas.php (si entráis aquí ni se os ocurra jugar al juego de abajo, podría resultar mortal y tampoco veáis el vídeo que le sigue, es muy duro) si lo destaco es para que no lo hagáis, ¿eh? ¡ja,ja,ja!

De todas maneras no irá en esta web, pero si no consigo que vaya aquí...
xevi
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-02-19 05:16 @261

Re: la web trata de dibujo

Notapor explorer » 2006-02-20 11:05 @503

xevi escribiste:Y si no he entendido mal la función del buscador y de poner esa ruta es la de buscar en toda la web,
NO. El buscador mirará los ficheros y subdirectorios que estén DENTRO del directorio que pongas en la variable $root_dir. Si da la casualidad que ese directorio corresponde con el mismo que el del web, entonces sí que buscará en todo el web.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor xevi » 2006-02-20 11:18 @512

A ver, pero la casualidad no es casualidad.

La idea es esa, si quiero otro buscador que busque solo en la carpeta dibujos por ejemplo sería otro tema, lo que quiero decir es que su función poniendo la ruta que yo puse es la de buscar en toda la web.

Evidentemente si le pongo que busque en otro directorio, no buscará en los demás, pero sí en los subdirectorios que este contenga.

Como puedes ver puse el directorio que contiene todo el contenido, páginas, subdirectorios, más páginas, etc.

Eso es lo que quería decir y en este caso no es el problema de que no me salgan resultados.

Que no sé dónde anda el error :( Lo que puse es lo que hay.
xevi
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-02-19 05:16 @261

Notapor explorer » 2006-02-20 12:28 @561

Haz una prueba...

Justo después de la línea

open(FILE, "< $File::Find::name") or return;

escribe esta otra:

print "Leyendo fichero $File::Find::name\n<br>";

y así sabrás qué ficheros está mirando el buscador.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron