サイト内検索を付けたくて、以下のサイトよりモジュールをダウンロードしました。
http://www.synck.com/contents/download/cgi-perl/sitesearch_crw.html
CGIの設定環境(CGI設置場所、Perlのパス、Encodeモジュールの存在、パーミッション)
についてはサーバー管理者に確認済みで、問題ないのですが、実行してもエラーも出ず、
うんともすんとも言わない状態です。
HTML からは、以下のように呼び出しがされています。
-------------------------------------------------------------------------------
<form class="sitesearch" method="get" action="index.cgi" onsubmit="return sitesearch(this);">
<input type="text" name="q" value="" /> <input type="submit" value="サイト内検索" />
-------------------------------------------------------------------------------
action で呼び出しているindex.cgi で動いているかどうか確認する方法を
教えていただけませんでしょうか。
一応、index.cgi の最初の方にメッセージを入れてみたのですが、表示されませんでした。
以下は、index.cgi の一部です。
-------------------------------------------------------------------------------
#!/usr/bin/perl
## 京
use Encode;
require './init.cgi';
&_GET;
my(@keys) = split(/ /,$_GET{'q'});
print "テスト\n"; ←こんな感じにメッセージいれました。
## int
$totime = time();
if((-f $config{'cache'}) && (((stat($config{'cache'}))[9] + 60 * $config{'expiration'}) > $totime)){
## Load Cache
@pages = &_LOAD($config{'cache'});
}
else{
## Create Cache
push @dirs,$config{'dir'};
while($cnt < @dirs){
$dir = $dirs[$cnt];
opendir DH, $dir or die "$dir:$!";
while (my $file = readdir DH) {
next if $file =~ /^\.{1,2}$/;
$currentpath = $dir . $file;
if(-d $currentpath && (grep(/^${file}$/,@excluded_dirs_name)) == 0){
push @dirs, "${currentpath}/";
}
elsif((split(/\./,$currentpath))[-1] =~ /htm/si){
$html = join("",&_LOAD($currentpath));
$html =~ s/\t//ig;
$html =~ s/\r//ig;
$html =~ s/\n//ig;
my ($tilte,$snippet,$keywords,$contents,$thumbnail);
if($html =~ /<title>(.*?)<\/title>/si){
$title = $1;
if($title =~ /$config{'title_regex'}/){
$title = $1;
}
}
if($html =~ /<meta.*?name=\"Description\".*?content=\"(.*?)\"/si){
$snippet = $1;
}
if($html =~ /<meta.*?name=\"Keywords\".*?content=\"(.*?)\"/si){
$keywords = $1;
}
if($html =~ /$config{'body_regex'}/){
$contents = $1;
$contents =~ s/<script.*?\/script>//g;
$contents =~ s/<.*?>//g;
}
## Thumbnail
$thumbnail_path = "${dir}images/thumb_${file}\.jpg";
if(-f $thumbnail_path){
$thumbnail = $thumbnail_path;
$thumbnail =~ s/$config{'uri_replace_before'}/$config{'uri_replace_after'}/i;
}
@file_info = stat($currentpath);
($sec,$min,$hour,$day,$mon,$year) = localtime($file_info[9]);
$file_updatetime = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$day,$hour,$min,$sec);
$file_size = int($file_info[7] / 1024);
$currentpath =~ s/$config{'uri_replace_before'}/$config{'uri_replace_after'}/i;
@page = ($currentpath,$thumbnail,$title,$snippet,$keywords,$contents,$file_updatetime,$file_size);
push @pages,join("\t",@page);
}
}
closedir DH;
$cnt++;
}
-------------------------------------------------------------------------------
よろしくお願いいたします。
お礼
早々にご回答いただきありがとうございました。 --------------------------------------------- onsubmit="return sitesearch(this);" を削除して送信すると結果はちゃんと表示されますか? --------------------------------------------- これがヒントになりました。 Internal Server Errorが出まして、そこから確認してみると ファイルの転送モードがバイナリになっていることが原因でした。 お恥ずかしい話、CGIはASCIIモードで転送するものだということを 知りませんでした。。。 とても助かりました。ありがとうございました!