都道府県穴埋めゲーム

サイト内検索を付けたくて、以下のサイトよりモジュールをダウンロードしました。
http://www.synck.com/contents/download/cgi-perl/ …

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++;
}

-------------------------------------------------------------------------------

よろしくお願いいたします。

A 回答 (2件)

>うんともすんとも~


ということはjavascriptの問題ではありませんか?
onsubmit="return sitesearch(this);"
とありますが、必要なJavaScriptファイルは取り込んでいますか?

Ajaxモードであれば、検索結果を表示するための
<div id="search_result"></div>
はHTMLのどこかに記入されていますか?

あるいは
onsubmit="return sitesearch(this);"
を削除して送信すると結果はちゃんと表示されますか?
(あるいは直接 http://~/index.cgi?q=aaaなどでアクセスしてみる)
    • good
    • 0
この回答へのお礼

早々にご回答いただきありがとうございました。

---------------------------------------------
onsubmit="return sitesearch(this);"
を削除して送信すると結果はちゃんと表示されますか?
---------------------------------------------
これがヒントになりました。
Internal Server Errorが出まして、そこから確認してみると
ファイルの転送モードがバイナリになっていることが原因でした。

お恥ずかしい話、CGIはASCIIモードで転送するものだということを
知りませんでした。。。

とても助かりました。ありがとうございました!

お礼日時:2013/05/20 13:26

出来ればCGIはサーバーで動作させる前にローカルでテストすべきですが・・


シェルが使えるなら、シェルからステップごとに動作を追っていく。
シェルが使えないなら、
 print の対象をファイルにして出力している内容をテキストに書き出す。
 BEGIN{}コマンドを付け加えて、エラーを書き出す
とか

 一番よいのは、シェルから、一行ずつ動作させていくのでしょうが??

>一応、index.cgi の最初の方にメッセージを入れてみたのですが、表示されませんでした。
 の意味がわからないのですが、きちんとHTTPD応答ヘッダを書きましたか?

 他人のスクリプトを解析して、本人でもわからないエラーを見つけるのは、大変な作業です。ん万円もらっても断る。
 とにかく自力で解決してください。

※ローカルにテスト環境を作りましょう。
 apacheとactivePerl。CYGWINだとシェルも使える。
    • good
    • 0
この回答へのお礼

早々にご回答いただきありがとうございました。

お恥ずかしい話、私の知識不足で・・・
ファイルの転送モードがバイナリになっていたことが原因でした。

また、アドバイスもありがとうございます。

お礼日時:2013/05/20 13:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!