Visualizzazione dei risultati da 1 a 4 su 4

Discussione: cerca con perl...

  1. #1
    Utente di HTML.it L'avatar di biocco
    Registrato dal
    Sep 2003
    Messaggi
    486

    cerca con perl...

    Ciao raga io di perl ci capisco poco!!!.

    Vorrei chiedervi dove posso avere una guida efficente gratuita e se per favore in questo script per un motore di ricerca si possa escludere l'analisi di alcune directory. Se si come si fa???? il problema è che mi tira fuori i file vti di frontpage.... grazie molte!!!

    codice:
    #!c:\perl
    
    
    # this is the url of your site
    $base_url = "http://$ENV{'HTTP_HOST'}";
    
    # this the path equivalent to your url
    #$base_dir = $ENV{'DOCUMENT_ROOT'}; 
    $base_dir = "e:/wwwroot/www/miosito.it/Online/";
    
    # this is the url of this script
    $search_url = "$base_url/cgi-bin/IecSrcEng.pl";
    
    # this is the path to header.shtml
    $header = "Search/headerEng.htm";
    
    # this is the path to footer.shtml
    $footer = "Search/footerEng.htm";
    
    # this is the background color of the search
    # you can also use an image by using background=image/ha.gif
    #$bg = 'bgcolor=blue';
    
    # this is every directory you want to search in, if you choose
    # yes to search in subdirectories, you only need to list the
    # main directories here... but if you only want to search some
    # subdirectories, you can do so like this:
    # @dirs = ('','news'); would search in news and the
    # subdirectory oldnews
    #@dirs = ('testsite');
    #@dirs = ('inglese');
    
    # search all directories within directories? yes/no
    $subdirs = "yes";
    
    # what files type do you want to search in? note that htm works for 
    # shtml, html, htm, etc...
    @searchtypes = ('htm','html');
    
    use CGI qw(:standard);
    $search = new CGI;
    
    $result_num = $search->param('result_num');
    $show_search = $search->param('show_search');
    $show_summary = $search->param('show_summary');
    $keyword = $search->param('keyword');
    $page = $search->param('page');
    $connector = $search->param('connector');
    $case = $search->param('case');
    #$header = $search->param('header');
    #$footer = $search->param('footer');
    $mydirs = $search->param('dirs');
    #$bg = $search->param('bkg');
    @dirs = ($mydirs);
    
    &get_header_footer;
    &display_page unless $show_search eq "no";
    
    
    @keywords = split(/\s+/,$keyword);
    
    foreach $type (@dirs) {
    	chomp($type);
    	$dir = "$base_dir/$type";
    
    	chdir($dir);
    	opendir (DIR, $dir) || &cgiError ("Opening $dir Failed:", "$!");
    	@allfiles = readdir(DIR);
    	$totalnum=@allfiles;
    	closedir (DIR);
    
    	for($i=1; $i<$totalnum; $i++) {
    
    		if (-d $allfiles[$i]) { 
    			if ($allfiles[$i] ne "." && $allfiles[$i] ne ".." && $type ne "" && $subdirs eq "yes") { 
    				if ($type ne ".") {
    					push(@dirs,"$type/$allfiles[$i]");
    				}
    				else {
    					push(@dirs,"$allfiles[$i]");
    				}
    			}
    		}
    
    		if (-T $allfiles[$i]) 
    			{
    			($file,$ext) = split(/\./, $allfiles[$i]);
    
    			foreach $searchtype (@searchtypes) 
    				{
    				if ($ext =~ /$searchtype/i) 
    					{
    					open (SEARCH,"$allfiles[$i]") || &cgiError ("Open $allfiles[$i] Failed:", "$!");
    					@search = <SEARCH>;
    					close(SEARCH);
    
    					if ($type ne ".") 
    						{
    						$temp_file = "$type/$allfiles[$i]";
    						}
    					else
    						{
    						$temp_file = "$allfiles[$i]";
    						}
    
    					foreach $text (@search) 
    						{
    						chomp($text);
    
    						$text =~ s/<([^>]|\n)*>//g;
    						$text =~ s/&([^;])*;//g;
    						$text =~ s/])*-->//g;
    
    						if ($connector eq "or" && $case eq "insensitive") {
    							foreach $word (@keywords) {
    								if (!($text =~ /$word/i)) { $match = 0;} 
    								else { $matches{$temp_file} = $text; last;}
    							}
    						}
    
    						if ($connector eq "and" && $case eq "insensitive") {
    							if (!($text =~ /$keyword/i)) { $match = 0;} 
    							else { $matches{$temp_file} = $text; last;}
    						}
    
    						if ($connector eq "or" && $case eq "sensitive") {
    							foreach $word (@keywords) {
    								if (!($text =~ /$word/)) { $match = 0;} 
    								else { $matches{$temp_file} = $text; last;}
    							}
    						}
    
    						if ($connector eq "and" && $case eq "sensitive") {
    							if (!($text =~ /$keyword/)) { $match = 0;} 
    							else { $matches{$temp_file} = $text; last;}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    
    foreach $key (sort(keys %matches)) { push(@matches,$key); push(@summary,$matches{$key}); }
    
    &print_header;
    
    print <<SEARCH_PAGE;
    
          <table width="100%" border="0" cellpadding="10" cellspacing="0">
          <tr bgcolor="#000000">
          <td valign="middle" align="left"><font face="Verdana, Arial, Helvetica" color="#FFFFFF" size="3">Search result</font></td>
          <td valign="bottom" align="right"> 
    
    SEARCH_PAGE
    
    	$total = @matches;
    	$real_total = $total;
    	eval { $totalnum = int (($total + $result_num)/ $result_num); };
    
    	if ($page ) { ($liststart,$listend) = split(/ /,$page); }
    	
    	else { 
    		if ($total < $result_num) { $liststart = 0; $listend = $total; }
    		else { $liststart = 0; $listend = $result_num; }
    	}
    	
    if ($total > $result_num) 
    	{
    	print "<form action=\"$search_url\" method=\"POST\" name=\"cerca\">\n";
    	print "<input type=\"hidden\" name=\"header\" value=\"$header\">\n";
    	print "<input type=\"hidden\" name=\"footer\" value=\"$footer\">\n";
    	print "<input type=\"hidden\" name=\"dirs\" value=\"$mydirs\">\n";
    	print "<input type=\"hidden\" name=\"dirs\" value=\"$mydirs\">\n";
    
    	print "<font face=\"Verdana, Arial, Helvetica\" color=\"#FFFFFF\" size=\"1\">Show documents:[/b]</font>";
    	print "<select name=\"page\" onChange=\"javascript:document.cerca.submit();\">\n";
    	
    	for($i=0; $i<$totalnum; $i++) 
    		{
    		eval { $num = ($i * $result_num); };
    		eval { $end = ($num + $result_num); };
    		if ($matches[$num] ) 
    			{
    			if ($total<$end) { $end = $total; }
    		
    			$real_num = $num;
    			eval { $num = ($num + 1); };
    			print " <option value=\"$real_num $end\">$num-$end</option>\n";
    			eval { $num = ($num - 1); };
    			}
    		}
    
    	print "</select><input type=\"hidden\" name=\"show_search\" value=\"no\">\n";
    	print "<input type=\"hidden\" name=\"show_summary\" value=\"$show_summary\">\n";
    	print "<input type=\"hidden\" name=\"result_num\" value=\"$result_num\">\n";
    	print "<input type=\"hidden\" name=\"case\" value=\"$case\">\n";
    	print "<input type=\"hidden\" name=\"connector\" value=\"$connector\">\n";
    	print "<input type=\"hidden\" name=\"keyword\" value=\"$keyword\"></form></p>\n";
    	}
    else
    	{
    	print "\n"
    	}
    
    eval { $first = ($liststart + 1); };
    $last = $listend;
    if ($listend<=$result_num && $end<=$result_num) { $last = $total; }
    
    print "</td></tr></table>\n";
    
    #
    print "<table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\"><tr><td colspan=\"2\">\n";
    
    if ($total eq "0") { print "<font face=\"Verdana, Arial, Helvetica\" size=\"2\" color=\"#FFFFFF\">Sorry, No Matches Found!
    We did not find anything that matched your search criteria.
    Please try searching again with a different combination of keywords.</font>\n";}
    
    else {
    
          print "
    
    <font face=\"Verdana, Arial, Helvetica\" size=\"2\" color=\"#FFFFFF\">Below are the results of your search for: <font color=\"#333300\">$keyword</font>
    Documents  from $first to $last of $real_total Matches
    
    \n";
    	if ($liststart eq "$listend") { eval { $liststart = ($liststart - 1); }; }
    
    	for($liststart; $liststart<$listend; $liststart++) 
    		{
    
    		if ($matches[$liststart]) 
    			{
    			$match = $matches[$liststart];
    			$summary = $summary[$liststart];
    
    #			if ($summary eq "") { $summary = "Nessun sommario disponibile."; }
    
    			print "<a href=\"$base_url/$match\">$match</a>
    \n";
    #			print "URL: $base_url/$match
    \n";
    #			if ($show_summary eq "yes") { print "Sommario: $summary
    "; }
    #			print "
    \n\n";
    			}
    		}
    	print "</font><font face=\"Verdana, Arial, Helvetica\" size=\"1\" color=\"#FFFFFF\">
    
    ";
    	print "
    Didn't find what you were looking for? Try searching again with a more specific keyword.
    
    \n\n";
    	}
    
    print "<form action=\"$search_url\" method=\"POST\" name=\"show_search\">\n";
    print "<font color=\"#FFFFFF\" face=\"Verdana, Arial, Helvetica\" size=\"2\">Search for: <input type=\"text\" size=\"36\" name=\"keyword\" MAXLENGTH=\"35\"></font>
    
    \n";
    print "<input type=\"hidden\" name=\"show_search\" value=\"no\">\n";
    print "<input type=\"hidden\" name=\"result_num\" value=\"$result_num\">\n";
    print "<input type=\"hidden\" name=\"case\" value=\"$case\">\n";
    print "<input type=\"hidden\" name=\"connector\" value=\"$connector\">\n";
    print "<input type=\"hidden\" name=\"show_summary\" value=\"$show_summary\">\n";
    print "<input type=\"hidden\" name=\"header\" value=\"$header\">\n";
    print "<input type=\"hidden\" name=\"footer\" value=\"$footer\">\n";
    print "<input type=\"hidden\" name=\"dirs\" value=\"$mydirs\">
    \n";
    #print "<input type=\"submit\" value=\"Cerca\"></form>
    \n";
    
    print "</td></tr></table>\n";
    
    &print_footer;
    
    
    # sub routines #
    
    sub display_page {
    &print_header;
    
    print "<form action=\"$search_url\" method=\"POST\" name=\"show_search\">";
    print <<END_SEARCH_PAGE;
              <table width="100%" border="0" cellspacing="0" cellpadding="10">
                <tr bgcolor="#000000"> 
                  <td colspan="3"><font face="Verdana, Arial, Helvetica" color="#FFFFFF" size="2">
    Enter a few words to search for and
    you will get a list of every file that contains a match</font></td>
                </tr>
                <tr> 
                  <td bgcolor="#666666" width="143" align="right"><font color="#FFFFFF" face="Verdana, Arial, Helvetica" size="1">
                 Search as </font></td>
                  <td width="218" bgcolor="#666666"> <font face="Verdana, Arial, Helvetica" size="1"> 
                    <input type="radio" name="connector" value="or" checked>
                    <font color="#FFFFFF">Keywords </font></font> </td>
                  <td width="139" bgcolor="#333333"> <font face="Verdana, Arial, Helvetica" size="1"> 
                    <input type="radio" name="connector" value="and">
                    <font color="#FFFFFF">Phrase</font></font></td>
                </tr>
                <tr bgcolor="#7F7F2A"> 
                  <td width="143" align="right" bgcolor="#91826E"><font color="#FFFFFF" face="Verdana, Arial, Helvetica" size="1">Result per page</font></td>
                  <td colspan="2" bgcolor="#91826E"> 
                    <table width="100%" border="0" cellspacing="0" cellpadding="5">
                      <tr bgcolor="#91826E">
                        <td><font face="Verdana, Arial, Helvetica" size="1"> 
                          <input type="radio" name="result_num" value="10">
                          <font color="#FFFFFF">10</font></font></td>
                        <td><font face="Verdana, Arial, Helvetica" size="1"> 
                          <input type="radio" name="result_num" value="20" checked>
                          <font color="#FFFFFF">20</font></font></td>
                        <td><font face="Verdana, Arial, Helvetica" size="1"> 
                          <input type="radio" name="result_num" value="30">
                          <font color="#FFFFFF">30</font></font></td>
                        <td><font face="Verdana, Arial, Helvetica" size="1"> 
                          <input type="radio" name="result_num" value="40">
                          <font color="#FFFFFF">40</font></font></td>
                        <td><font face="Verdana, Arial, Helvetica" size="1"> 
                          <input type="radio" name="result_num" value="50">
                          <font color="#FFFFFF">50</font></font>
    		<input type="hidden" name="show_search" value="no">
    END_SEARCH_PAGE
    
    print "<input type=\"hidden\" name=\"header\" value=\"$header\">\n";
    print "<input type=\"hidden\" name=\"footer\" value=\"$footer\">\n";
    print "<input type=\"hidden\" name=\"dirs\" value=\"$mydirs\">\n";
    
    print <<END_SEARCH_PAGE;
    		     </td>
                      </tr>
                    </table>
                  </td>
                </tr>
              </table>
    END_SEARCH_PAGE
    
    &print_footer;
    
    exit;
    }
    
    sub print_header {
        print "Content-type: text/html\n\n";
    
    	foreach $linez (@dataa) {
    	chomp($linez);
    	print "$linez\n";
    	}
    }
    
    sub print_footer {
    	foreach $liney (@datab) {
    	chomp($liney);
    	print "$liney\n";
    	}
    }
    
    sub get_header_footer {
    	open (FILEA,"$base_dir/$header") || &cgiError ("Reading Header Failed:", "$!");
    	@dataa = <FILEA>;
    	close(FILEA);
    
    	open (FILEB,"$base_dir/$footer") || &cgiError ("Reading Footer Failed:", "$!");
    	@datab = <FILEB>;
    	close(FILEB);
    }
    
    sub cgiError {
    	my ($error_cause,$error) = @_;
    
    	if ($error_cause eq "") { $error_cause = "Error:"; }
    	if ($error eq "") { $error = "The script encountered problems and terminated"; }
    
    	&print_header;
    	print "<h3>$error_cause</h3>$error
    
    ";
    	&print_footer;
    
    exit;
    }

  2. #2
    un metodo è inserire dopo

    foreach $type (@dirs) {

    questa istruzione:

    next if ($type ~= /vti/);

    al posto di vti metti il nome che vuoi evitare.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Utente di HTML.it L'avatar di biocco
    Registrato dal
    Sep 2003
    Messaggi
    486
    scivendo cosi (ho agginto solo questo):
    foreach $type (@dirs) {
    next if ($type ~= /_vti_cnf/);
    chomp($type);
    $dir = "$base_dir/$type";


    ottengo cosi:

    CGI Error
    The specified CGI application misbehaved by not returning a complete set of HTTP headers.

  4. #4
    fai la prova disattivando la linea così:

    foreach $type (@dirs) {
    # next if ($type ~= /_vti_cnf/);
    chomp($type);
    $dir = "$base_dir/$type";

    se ti funziona di nuovo allora la cosa va approfondita, se continua a non funzionare vuol dire che c'è qualche altro errore.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.