のフリー、シェアCGI・PHPスクリプト・JavaScriptをキーワード、97のカテゴリーから検索できます。スクリプトの登録ご利用は一切無料です。


フリー、シェアCGI・PHPスクリプトをキーワード、96のカテゴリーから検索できます。

 スクリプトをお探しなら当サイトでOK

  •  フリー、シェアのCGI・PHPスクリプトをメインに検索。
  •  ランキングによる評価で人気のスクリプトを紹介。
  •  サンプル(ページ)によるダウンロード前の事前評価。
  •  お気に入りスクリプトへのパーソナルリンクの作成。

 スクリプト登録のメリット

  •  シェアスクリプトでも、掲載は一切無料。
  •  細かなカテゴリー(全97項目)で閲覧者に分かり易く分類。
  •  スクリプトを印象づけるサンプル(ページ)の登録が可能。
  •  ダウンロードランキングの実施による人気度の評価。

当サイトはQ&A掲示板(コミュニティ)の窓口を共有して下さるサイト様を募集しています。

[Q&A掲示板] 共有サイト様募集!

サイト内検索機能拡張-1


今回は、サイト内検索に自動でリンク先のタイトルを取得する機能を付けます。
また、キーワードに関して信用度の高い順に並び替えます。

#!/usr/bin/perl

# 検索の対象とする拡張子
@SEARCH = ('html', 'htm', 'shtml');

# デコード処理
if($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
   $query = $ENV{'QUERY_STRING'};
}
@args = split(/&/, $query);
foreach $i (@args) {
   ($name, $val) = split(/=/, $i);
   $name =~ tr/+/ /;
   $name =~ s/%([0-9a-fA-F]{2})/pack('C', hex($1))/eg;
   $val =~ tr/+/ /;
   $val =~ s/%([0-9a-fA-F]{2})/pack('C', hex($1))/eg;
   $in{$name} = $val;
}

unless($in{'word'}) {
   print "Content-type: text/html\n\n";
   print "検索ワードを入力してください!\n";
   exit;
}

$in{'word'} =~ s/ / /g;

@word = split(/ /, $in{'word'});

opendir(DIR, "./");
while($file = readdir(DIR)) {
   my($f) = 0;
   foreach(@SEARCH) {
      $f = 1 if($file =~ /$_$/);
   }
   next unless($f);
   $f = 0;
   open(DATA, "< $file");
   my(@line) = <DATA>;
   close(DATA);

   # 検索開始
   # ワード一致回数重複カウント防止ハッシュの初期化
   undef(%tmp);
   foreach $w (@word) {
      foreach $l (@line) {
         # 検索ワードが一致したなら$rank{$file}(信用度)に一致した個数を代入加算する
         $rank{$file} += $l =~ s/$w/$w/gi;
         # タイトル取得
         if($l =~ /<title>(.+)<\/title>/i) {
            $title{$file} = $1;
         }
         # ワードが一致していて、さらにこれ以前にワードが一致していなかったら(重複カウント防止が偽なら)
         if(!exists($tmp{$w}) && $l =~ /$w/i) {
            # 重複カウント防止ハッシュに真を代入
            $tmp{$w} = 1;
            # ワード一致数を加算
            $f++;
         }
      }
   }
   # タイトルが取得できなかったら
   unless($title{$file}) {
      $title{$file} = 'タイトルなし';
   }

   # ワード一致数とワード数が同じなら
   if($f == @word) {
      # 検索結果へ追加
      push(@url, $file);
   }
}
closedir(DIR);

$n = @url;

print "Content-type: text/html\n\n";
if($n) {
   # 信用度順に並び替えて出力
   foreach(sort { $rank{$b} <=> $rank{$a} } @url) {
      print "・ <a href=\"$_\">$title{$_}</a> 信用度($rank{$_})\n<br>";
   }
} else {
   print "一致するワードはありませんでした。\n";
}

検索部分が非常に複雑になってきました。
今回の検索機能には信用度というものが追加されています。

信用度とは、具体的には、ワードが一致した合計回数です。
つまり、検索したワードがたくさん出現するページほど信用度が高いということになります。

ワード一致回数重複カウント防止ハッシュの初期化とありますが、
これは前回の検索(ループ)でハッシュ内の今回のワードに関しての重複カウント防止変数が真になっていた場合、
正常に動作しないので必ず初期化します。

並び替えのところでは、検索結果へ追加されたURLのキーで、%rank内の要素(信用度)で降順に並び替えています。

scriptEYE