¿©±â¼ ¼³¸íÇÏ´Â °Ë»ö¿£ÁøÀº AltaVista¿Í °°Àº Çü½ÄÀÇ Å°¿öµå °Ë»ö¿£ÁøÀÌ´Ù. ´Ù¸¸ AltaVista¿Í °°Àº °Ë»ö¿£Áø°úÀÇ °¡Àå ÁÖµÈ Â÷ÀÌÁ¡Àº ´Ù¸¥ »çÀÌÆ®¸¦ °Ë»öÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÚ½ÅÀÇ »çÀÌÆ®¸¦ °Ë»öÇÑ´Ù´Â °Í°ú dB¸¦ ÀÌ¿ëÇؼ °Ë»öÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó µî·ÏµÈ µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» °Ë»öÇÑ´Ù´Â °ÍÀÌ´Ù.
µ¿ÀÛ¿ø¸®
µ¿ÀÛ¿ø¸®´Â ´ÙÀ½°ú °°ÀÌ ¾ÆÁÖ °£´ÜÇÏ´Ù.
°Ë»ö¿£Áø ±¸¼º
CGI ÆÄÀÏ
search.cgi* »çÀÌÆ® °Ë»ö CGI
chmod 755 search.cgi
mycgilib.pl °Ë»ö¿£Áø¿ë Library
chmod 644 mycgilib.pl
¼³Á¤ÆÄÀÏ
search.cfg °Ë»ö¿£ÁøÀÇ ¼³Á¤ÆÄÀÏ
chmod 644 search.cfg
´ëºÎºÐÀÇ ¼³Á¤ÀÇ ÀÚ½ÅÀÇ È¯°æ¿¡ ¸Â°Ô º¯°æ
Æû¹®¼ ÆÄÀÏ
sindex.html ÇÁ·¹ÀÓÀ» ¸¸µå´Â HTML ÆÄÀÏ
chmod 644 sindex.html
stop.html °Ë»ö ÆûÀ» Æ÷ÇÔÇÏ´Â HTML ¹®¼
chmod 644 stop.html
FORMÀÇ actionÀ» Àڽſ¡ ¸Â°Ô º¯°æ
sbelow.html °Ë»ö¿£Áø¿¡ ´ëÇÑ µµ¿ò¸» ÆÄÀÏ
chmod 644 sbelow.html
style.css Cascading Style Sheet ÆÄÀÏ
chmod 644 style.css
search.js ÀÔ·ÂÆûÀ» °Ë»çÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ®
chmod 644 search.js
°Ë»ö¿£Áø ¼³Á¤
# User = »ç¿ëÀÚ À̸§. search·Î µÎ¸éµÊ
# Refer = ¹æ¸í·ÏÀ» ±âµ¿ÇÒ ¼¹öÀÇ IP¿Í DNS
User = search
Refer = 210.206.89.230, comp.mailx2.com, 127.0.0.1, localhost
# SearchForm = °Ë»öÆûÀÇ URL
# Style = ¼½ÄÆÄÀÏÀÇ URL
SearchForm = /~artech/search/sindex.htm
Style = /~artech/style.css
# TitleLen = TitleÀ» »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì Title·Î »ç¿ëÇÒ ´Ü¾îÀÇ ¼ö
# SummaryLen = ¿ä¾àÀ» ÃßÃâÇÒ ¶§ ÃßÃâÇÒ ÁÙÀÇ ¼ö
TitleLen = 5
SummaryLen = 5
# SearchDir = °Ë»öÇÒ ±âº» µð·ºÅ丮. ÀÌ µð·ºÅäÀÇ ÇÏÀ§µð·ºÅ丮°¡ °Ë»öµÊ.
# SearchUrl = °Ë»öÇÒ µð·ºÅ丮ÀÇ URL
# SearchExt = °Ë»öÇÒ ÆÄÀÏÀÇ È®Àå.
# SearchStyle = °á°ú ȸ鿡 »ç¿ëÇÒ ¼½Ä Å©·¡½º. search·Î µÎ¸éµÊ.
SearchDir = /home/artech/public_html
SearchUrl = /~artech
SearchExt = *.htm*, *.txt
SearchStyle = search
# NoSearch = °Ë»ö¿¡¼ Á¦¿ÜÇÒ µð·ºÅ丮
NoSearch = /~artech/html40, /~artech/report
°Ë»ö¿£Áø ¼Ò½º
search.cgi
1 : #!/usr/local/bin/perl
2 : require './mycgilib.pl';
3 :
4 : $conf_path = './search.cfg';
5 : %FORM = &read_parse;
6 : %CONF = &read_conf($conf_path, 'search');
7 :
8 : @refer = split(/, */, $CONF{'Refer'});
9 : @nosearch = split(/, */, $CONF{'NoSearch'});
10 :
11 : $search_form = $CONF{'SearchForm'};
12 : $style = $CONF{'Style'};
13 : $search_dir = $CONF{'SearchDir'};
14 : $search_url = $CONF{'SearchUrl'};
15 : @EXT = split(/, */, $CONF{'SearchExt'});
16 : $style_class = $CONF{'SearchStyle'};
17 : $title_length = $CONF{'TitleLen'};
18 : $summary_length = $CONF{'SummaryLen'};
19 :
20 : MAIN:
21 : {
22 : $keyword = $FORM{'keyword'};
23 : $method = $FORM{'method'};
24 : $case = $FORM{'case'};
25 : $sortmeth = $FORM{'sortmeth'};
26 :
27 : &redirect($search_form)
if(&no_refer || $keyword eq '' || $method eq '');
28 :
29 : %result = &search;
30 :
31 : @key = sort(keys %result);
32 : @key = reverse @key if($sortmeth eq 'desc');
33 : @keylist = split(/ */, $keyword);
34 :
35 : for(0..$#keylist) {
36 : if($method eq 'and' || $method eq 'or') {
37 : $key .= "$keylist[$_]";
38 : $key .= '|' if($_ != $#keylist);
39 : }else{
40 : $key = $keyword;
41 : }
42 : }
43 :
44 : $num = $#key + 1;
45 :
46 : print &print_header;
47 : print &html_top("°Ë»ö°á°ú","$style", "$style_class");
48 : print &print_title("Search Result", "°Ë »ö °á °ú");
49 : print "<p class=info>ÃÑ $num°³°¡ °Ë»öµÇ¾ú½À´Ï´Ù.</p>\n";
50 : print "<hr noshade>\n";
51 :
52 : if ($num == 0) {
53 : print &no_result;
54 : }else {
55 : print "<DL>\n";
56 : $count=1;
57 :
58 : foreach $key_index (@key) {
59 : ($url, $title, $summary, $file_date, $file_size)
=split(/\c\V/, $result{$key_index});
60 :
61 : if($case eq '') {
62 : $summary =~ s/($key)/<span><\/span>/gi;
63 : }else{
64 : $summary =~ s/($key)/<span><\/span>/g;
65 : }
66 :
67 : print &table_site;
68 : $count++;
69 : }
70 :
71 : print "</DL>\n";
72 : }
73 : print &html_bot;
74 : exit;
75 : }
76 :
77 : sub no_result {
78 : my($no) =<<No;
79 :
80 : <p class=info>
81 : ã´Â ÆÄÀÏÀÌ ¾ø½À´Ï´Ù. °Ë»ö¾î¸¦ ÁÙÀÌ´ø°¡ ³í¸®ÇÕÀ¸·Î °Ë»öÇϱ⠹ٶø´Ï´Ù.
82 : No
83 : return $no;
84 : }
85 :
86 : sub table_site {
87 :
88 : my($table);
89 : $table =<<Table_Row;
90 : <DT> <STRONG>$count</STRONG>. <a href="$url">$title</a> <DT>
91 : <DD> $summary <BR>
92 : <B>°»½ÅÀÏÀÚ</B>: $file_date - <B>ÆÄÀÏÅ©±â</B>: $file_size
93 : </DD>
94 : <P>
95 : Table_Row
96 : return $table;
97 : }
98 :
99 : sub search_path {
100 : my($path, $list, $key);
101 :
102 : $search_dir =~ s/\/\//g;
103 :
104 : for(0..$#EXT) {
105 : if($^O =~ /mswin32/i) {
106 : $path = "$search_dir/$EXT[$_]";
107 : $list .= `dir /b/S "$path"`;
108 : $list .= `dir /b/S/a:h "$path"`;
109 : }else {
110 : $list .= `find $search_dir -name '$EXT[$_]*' -print`;
111 : }
112 : }
113 :
114 : $list =~ s/\/\//g;
115 :
116 : my (@LIST) = split(/\s+/, $list);
117 :
118 : if ($#nosearch >= 0) {
119 : $key = join('|', @nosearch);
120 : @LIST = grep(!/$key/i, @LIST);
121 : }
122 :
123 : return @LIST;
124 : }
125 :
126 : sub search {
127 : my($id, $file);
128 : my (@LIST) = &search_path;
129 : my ($search_count) = '00000';
130 :
131 : foreach $file (@LIST) {
132 : my($title,$summary,$file_date,$file_size,$result)
= &extract_info($file);
133 :
134 : $file =~ s/^$search_dir//ig;
135 : $file = "$search_url/$file";
136 : $file =~ s!//!/!g;
137 :
138 : if($result >= 1) {
139 : my($search_result)
= "$file\cV$title\cV$summary\cV$file_date\cV$file_size";
140 :
141 : if($FORM{'sort'} eq 'file') {
142 : $id = "$file$search_count";
143 : $result{$id} = $search_result;
144 : }elsif($FORM{'sort'} eq 'title'){
145 : $id = "$title$search_count";
146 : $result{$id} = $search_result;
147 : }elsif($FORM{'sort'} eq 'fsize'){
148 : my($file_size_temp) = $file_size;
149 : $file_size_temp =~ s/([1-9][0-9]*)k//ig;
150 : if(length($file_size_temp) <= 5) {
151 : $file_size_temp=('0' x
(5-length($file_size_temp)) . $file_size_temp);
152 : }
153 : $id = "$file_size_temp$search_count";
154 : $result{$id} = $search_result;
155 : }elsif($FORM{'sort'} eq 'fdate'){
156 : $id = "$file_date$search_count";
157 : $result{$id} = $search_result;
158 : }else{
159 : $result{$search_count} = $search_result;
160 : }
161 : $search_count++;
162 : }
163 : }
164 : return %result;
165 : }
166 :
167 : sub extract_info {
168 : my($path) = @_;
169 : my($file_date,$file_size,$headline,$i,
$join_file,$key,$len,$line,$num,$result,$summary,$title);
170 : my(@file, @keylist, @word);
171 :
172 : $headline = '';
173 : $title = '';
174 :
175 : open(FILE, $path) || die "$!";
176 : @file = <FILE>;
177 : close(FILE);
178 :
179 : $path =~ tr/[A-Z]/[a-z]/;
180 :
181 : ($file_size, $file_date) = (stat($path))[7,9];
182 : $file_date = &get_date($file_date);
183 : $file_size = ( $file_size > 1023 ? int($file_size/1024) . "k"
: $file_size . "b" );
184 :
185 : if($path =~ /htm.?$/){
186 :
187 : for(0..$#file) {
188 : $line = $file[$_];
189 : $headline .= $line;
190 : if (( $line =~/<\/head>/i )
|| ( $line =~ /<\/title>/i )) {
191 : last;
192 : }
193 : }
194 :
195 : $headline =~ s/\n/ /g;
196 : if($headline =~ m!<title>(.*)</title>!i) {
197 : $title = ;
198 : }
199 : }
200 :
201 : $join_file = "@file";
202 : $join_file =~ s/<([^>]|\n)*>//g;
203 : $join_file =~ s/\n\n*/\n\cV/g;
204 : @file = split(/\cV/, $join_file);
205 :
206 : @file = &search_array(@file);
207 :
208 : $result = (@file > $summary_length ? $summary_length : @file);
209 : for($i=0; $i < $result; $i++) {
210 : $len = length($file[$i]);
211 :
212 : if( $len >= 70 && $#file > $result) {
213 : $file[$i] =~ s/(.{69}[^ |.]*) *.*/\n/g;
214 : }
215 :
216 : if($title eq '') {
217 : @word = split(/\s+/,$file[$i]);
218 : $num = (@word > $title_length ? $title_length : @word);
219 : $title = "@word[0..$num-1]";
220 : }
221 : $summary .= $file[$i];
222 : $summary =~ s/\n\n*/ /g;
223 : }
224 : return ($title, $summary, $file_date, $file_size, $result);
225 : }
226 :
227 : sub search_array {
228 : my(@file) = @_;
229 : my(@keylist);
230 :
231 : if($FORM{'method'} eq 'and') {
232 : @keylist = split(/ */, $FORM{keyword});
233 :
234 : if($FORM{'case'} eq '') {
235 : foreach $key (@keylist) {
236 : @file = grep(/$key/i, @file);
237 : }
238 : }else{
239 : foreach $key (@keylist) {
240 : @file = grep(/$key/, @file);
241 : }
242 : }
243 : }
244 :
245 : if($FORM{'method'} eq 'or') {
246 : @keylist = split(/ */, $FORM{keyword});
247 : for(0..$#keylist) {
248 : $key .= "$keylist[$_]";
249 : $key .= '|' if($_ != $#keylist);
250 : }
251 : if($FORM{'case'} eq '') {
252 : @file = grep(/$key/i, @file);
253 : }else{
254 : @file = grep(/$key/, @file);
255 : }
256 : }
257 :
258 : if($FORM{'method'} eq 'phrase') {
259 : $key = $FORM{keyword};
260 : if($FORM{'case'} eq '') {
261 : @file = grep(/$key/i, @file);
262 : }else{
263 : @file = grep(/$key/, @file);
264 : }
265 : }
266 : return @file;
267 : }
mycgilib.pl
¹æ¸í·ÏÀÇ mycgilib.plÀ» ÂüÁ¶
½ÇÇà°á°ú
°Ë»ö¿£Áø