imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 07.01.2006, 19:49     # 1
almengo
Newbie
 
Регистрация: 24.12.2005
Адрес: Germany
Пол: Male
Сообщения: 13

almengo Мелкий засранец
поиск по сайту

Hi!

Для организации поиска по сайту нашел в инете скрипт на Perl (find.pl и dirscan.pl),

find.pl

#!/usr/local/bin/perl
###################################
## K.I.S.S. Site Search Engine
## scripted by Alexander Moskalyuk
## http://www.moskalyuk.com
###################################


use CGI;

#this is the address of your main directory
#(directory where you want to start searching)
#on the Unix machine
$basedir="/data1/virtualave.net/username/public_html";

#This is the main URL of your site
$baseurl="http://home.infocity.de/almen/AFW/index.htm";

#Here's the list of all the files to be searched during the search
$fileinfo="$basedir/search/fileinfo.txt";

#Provide header and footer for nicer output
$headerfile="$basedir/search/header.txt";
$footerfile="$basedir/search/footer.txt";

print "Content-type: text/html\n\n";

getString(); #get the CGI string
getFiles(); #get the list of files to scan
search(); #do it!
print_header(); #print the header
results(); #insert the results of the search
print_footer(); #print the footer

###################################################################### ###
sub getFiles
{
open (FILEINFO, "<$fileinfo") || die "No such file";
my $counter=0;
while (<FILEINFO>)
{
chomp($_);
push (@files, $_);#push every filename onto array
$points[$counter++]=0;#no points assigned to the file originally
}#end of while
close (FILEINFO);
}#end of getFiles
###################################################################### ###
sub getString
{
my $a=new CGI;
my $str=$a->param('string'); #just one parameter
$str= lc $str; #all to lowercase
@string = split (/ /, $str); #split on whitespace
}
###################################################################### ###
sub search
{
foreach $search_word (@string)
{
my $counter=0;
foreach $file_name (@files)
{
open (FILE, "<$basedir$file_name");
my @all_lines = <FILE>;
foreach $line (@all_lines)
{
$line = lc $line; #convert to lowercase
++$points[$counter] if ($line =~ /$search_word/);
}#end of foreach
close (FILE);
$counter++;
}#end of foreach
}#end of foreach
}#end of search
###################################################################### ####
sub results
{
sumall();
print ("You searched for <b>@string</b><br>");
print ("Total of $sumall results<br>");
while ($sumall != 0)
{
my $max=0;
for ($x=0; $x<($#points+1); $x++)
{
$max=$x if ($points[$x]>$points[$max]);
}
print "$points[$max]: <a href=\"$baseurl$files[$max]\"> $files[$max]</a><br>\n";
$points[$max]=0;
sumall();
}#end of while
# print ("End of results");
}#end of results
###################################################################### ####
sub sumall
{
$sumall=0;
foreach $x (@points)
{
$sumall+=$x;
}
}
###################################################################### ####
sub print_header
{
open (header, "<$headerfile") || return;
while (<header>)
{
print $_;
}
close header;
}
###################################################################### ####
sub print_footer
{
open (header, "<$footerfile") || return;
while (<header>)
{
print $_;
}
close header;
}
###################################################################### ####


а зто dirscan.pl

#!/usr/local/bin/perl

#This is your main file directory on Unix machine
$basedir="/data1/virtualave.net/username/public_html";

#This is the URL of your site, to which the references will be appended
$baseurl="http://home.infocity.de/almen/AFW/index.htm";

#This is the location of the text file with the list of files to search
$fileinfo="$basedir/search/fileinfo.txt";

open (list, ">$fileinfo");

print<<html
Content-type: text/html\n\n
<!--#echo banner=""-->
html
;

work ("$basedir");
exclude();
print ("<br>Printed to: <b>$fileinfo</b><br>");
close (list);

sub work
{
my $dirname = shift;
print "<hr><b>dirname<b>-$dirname: <br>";
opendir (DIR, $dirname);
my @entries = readdir (DIR);
closedir (DIR);

foreach $entry (@entries)
{
next if $entry eq ".";
next if $entry eq "..";
work ("$dirname/$entry") if -d ("$dirname/$entry");
my $temp_name = "$dirname/$entry";
$temp_name =~ s/$basedir//;
print list ("$temp_name\n") if ((-f ("$dirname/$entry")) && ("$dirname/$entry" =~ /\.htm/));
}
}

sub exclude
{
open (list, "<$fileinfo");
my @names=<list>;
close list;
open (output, ">$fileinfo");
foreach $name (@names)
{
#The exclusion list. Any directory you want to exclude
#should be added here as follows: next if $name =~ /\/dir_name/;
#Below are the examples that are applicable to Moskalyuk.com Web site

next if $name =~ /\/private/;

print output ("$name");
print ("$name<br>");
}
close output;
}


но к сожалению не хватает знаний, чтобы их установить и протестировать. В инете всё хорошо расписано, но нет ответов на практические вопросы для новичков:


1.После распаковки файлов я указал URL моего сайта.

- Могу ли я указать вместо URL директорию папки, где находятся файлы сайта на компе для локального тестирования?

- что я должен задать здесь

$basedir="/data1/virtualave.net/username/public_html";?

- Есть ли в скриптах ещё строки, которые надо менять под мою страничку?

2.Каким образом включить зти файлы в сайт?

A. вариант тестирование локально на моём компе
B. вариант загрузка CGI протокола на сервер через windows commander

Оба варианта для меня не ясны. Особенно CGI- протокол.

-Как установить права на запуск файла find.pl в windows commander при соединении по FTP?
-Как вставить find.pl и dirscan.pl в каталог cgi-bin? (в корневую директорию, где лежит папка страницы и index.htm или я должен запросить у админа сервера право на использование CGI и сам протокол?)

3.Как связать форму поиска с результатами поиска? Так?

<FORM action=../../index.htm/cgi-bin/find.pl method=post target="_blank">
<input name="text" type="text" class="suchen" size="20">
<input class="go"name="submit" type="submit" value="Suchen"></FORM>

После внесения юзером одного или нескольких слов и нажатия на button «поиск» должна появиться новая подстраничка с результатми поиска и линками.
Надо ли её строить в HTML коде? Или зто делает скрипт find.pl ?
almengo вне форума  
Старый 09.01.2006, 10:17     # 2
PSyton
Junior Member
 
Аватар для PSyton
 
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187

PSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форуме
Цитата:
- Могу ли я указать вместо URL директорию папки, где находятся файлы сайта на компе для локального тестирования?
Для локального тестирования нужно иметь настроенный локальный вебсервер.
Цитата:
- что я должен задать здесь
$basedir="/data1/virtualave.net/username/public_html";?
здесь указывается локальный (для сервера) путь к каталогу с сайтом. Узнается у провайдера.
Цитата:
-Как вставить find.pl и dirscan.pl в каталог cgi-bin? (в корневую директорию, где лежит папка страницы и index.htm или я должен запросить у админа сервера право на использование CGI и сам протокол?)
Если есть поддержка CGI то можно просто подняться на уровень выше public_html/, там и будет cgi-bin. Про поддержку лучше всего узнать у провайдера.

Кстати, на форуме есть отдельный раздел для вебпрограммирования.
__________________
Дураки не динозавры - они не вымрут...
PSyton вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 18:43.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.