自分自身のホームページの内容を検索する、検索フォームの設置法について説明します。現在の wwwsrch.cgi のバージョンは Ver3.05 です。
Ver3.05 Ver3.04修正時の不具合を修正。 Ver3.04 perl4で、ファイルの検索が途中で終わってしまうことがあるという問題に対応。 Ver3.03 $how_many_linesの指定が無視されるというバグを修正。 Ver3.02 検索結果のタイトルが文字化けすることがあるというバグを修正。検索結果が太字にならないことがあるというバグを修正。Macintosh形式の改行コードの場合に検索結果が全文になるというバグを修正。 Ver3.01 perlのバージョンにより、検索結果が文字化けすることがあるというバグを修正。 Ver3.00 「ブラウブ」が「ブラウザ」にマッチしてしまうというバグに対処。その代わり若干処理速度に影響有り。JISコードの検索対象ファイルにも対応。
Webサーバ上のファイルから指定した単語含むページを検索して、その一覧を表示するシステムの設置方法について説明します。goo や Infoseek などのように、いろいろなURLを対象に検索するものではありません。自分のWebページの中身のみ(というか、同じサーバー上の指定したディレクトリの下のみ)を検索します。
あらかじめインデックスを作成しておく方式ではなく、常に全文検索を行いますので、設置は簡単ですが、サーバーには負荷をかけてしまいます。大規模な検索を行われる場合は、下記URLで紹介されているエンジンなどを検討してください。
日本語全文検索エンジンソフトウェアのリスト
http://www.kusastro.kyoto-u.ac.jp/~baba/wais/ other-system.html 私用・公用を問わずスクリプトの使用・改造・流用は自由ですのでご利用ください。ただし、利用上生じた不利益については保障できません。
(1) インデックス作成タイプではないので、動作は遅いです。CPUにも多大なる負荷を与えますので、大量のデータを検索させる場合はご注意ください。(2) 他サーバーのファイルを検索することはできません。どうしても検索したい場合は、設置方法の(13)を参照してください。
(3) <TITLE>〜</TITLE>は1行で記述してください。
(4) なるべくサーバーに負荷をかけないよう、あまり精密な検索は行っていません。たまに、誤った語句が検索されたり、語句が検索されなかったりすることがあります。
(5) その他の利用条件などはご使用上の注意を参照してください。
(1) まず、ご利用のプロバイダ(WWWサーバー)がCGIをサポートしていることを確認してください。.htaccess など必要な設定がある場合はサーバーの管理者の指示に従ってCGIを使用できる状態にしてください。このページでは、ある程度CGIの基礎をご存知の方を対象に説明しています。CGIの基礎については、「とほほのCGI入門」を参照してください。(2) サーバー上に次のファイルを用意してください。ファイルの中身は以下で説明します。
(3) wwwsrch.htmlの中身は以下のようにしてください。<FORM>〜</FORM>の部分を他の適当なHTML文書に貼り付けても構いません。
- http://サーバー/ディレクトリ/wwwsrch.htm
- http://サーバー/ディレクトリ/cgi-bin/wwwsrch.cgi
- http://サーバー/ディレクトリ/cgi-bin/jcode.pl
- http://サーバー/ディレクトリ/cgi-bin/index.html
<HTML> <HEAD> <TITLE>SEARCH</TITLE> </HEAD> <BODY> <FORM METHOD=POST ACTION="cgi-bin/wwwsrch.cgi"> <INPUT TYPE=text NAME="WORD"> <INPUT TYPE=radio NAME="ANDOR" VALUE="and">AND <INPUT TYPE=radio NAME="ANDOR" VALUE="or" CHECKED>OR <INPUT TYPE=submit VALUE="OK"> </FORM> </BODY> </HTML>もしくは単に、任意のHTMLファイルからwwwsrch.cgiへのリンクを張ってください。<A HREF="cgi-bin/wwwsrch.cgi">検索</A>(4) wwwsrch.cgiは、wwwsrch.txtを表示して、wwwsrch.cgiという名前になるように保存したものを利用してください。ファイルをサーバーに転送する前に、wwwsrch.cgi の内容を以下の説明にしたがって修正してください。(5) サーバー上の perl の置き場所が異なる場合は wwwsrch.cgi の1行目を適切に変更してください。
(6) 標準の設定では *.htm と *.html のみを検索するようになっていますが、*.txt も検索する場合は、「$sufix{".txt"} = 1;」という行を追加してください。
(7) 検索対象のディレクトリ名を「$target_dir = '..';」で指定してください。「..」の箇所には wwwsrch.cgi から見た、検索対象ディレクトリの相対パス名か、絶対パス名を指定してください。http://〜で始まるようなURLは指定することはできません。検索対象のディレクトリ名を複数指定したい場合は、「&search1($target_dir);」の行を、以下のように修正してください。
&search1("../directoryA/"); &search1("../directoryB/");(8) 検索にマッチすると、ファイル名や、タイトル、マッチした行の前後2行ずつを表示します。「$how_many_lines = 2;」という行を「$how_many_lines = 5;」のようにすると、前後5行ずつを表示します。
(9) 準備ができたらwwwsrch.cgiをサーバーに設置(転送)します。それぞれの改行コードに注意してください。サーバがUNIXの場合はパーミッションを次のようにしてください。
ファイル パーミッション 改行コード wwwsrch.htm 通常通り どちらでもよい wwwsrch.cgi 755 サーバーに合わせる jcode.pl 644 サーバーに合わせる index.html 通常通り どちらでもよい (10) jcode.plは、ftp://ftp.iij.ad.jp/
pub/ あたりから入手したものを設置してください。パーミッションは 644、FTPでの転送時はテキスト(ASCII)モードで転送してください。IIJ/ dist/ utashiro/ perl/ (11) index.htmlは、cgi-binの下にどんなスクリプトが置いてあるのか知られないためのセキュリティ改善です。中身はなんでもよいので、とにかく置くようにしましょう。
(12) 検索結果のジャンプ先のURLのパス名が期待するものと異なる場合、例えば、http://xx.yy.zz/aa/bb/index.htm へのリンクになって欲しいのに ../cc/dd/index.htm へのリンク(HTMLソース上で確認してください)となってしまう場合は、wwwsrch.cgi の「# 表示する」という行の次に下記の1行を追加することで回避できます。
$target =~ s|../cc/dd|http://xx.yy.zz/aa/bb|;ここで、「$target =~ s|文字列1|文字列2|;」は、単純に、文字列1を文字列2に置換することを意味します。(13) CGIを設置するサーバーが別など、どうしても、他サーバーのファイルを検索したい場合、CGIサーバーにすべてのドキュメントファイルのコピーを置き、これをCGIサーバーで検索し、検索結果のアドレスを(12)の方法で置換して表示するようにしてください。
検索フォームを設置してもうまく動かない時は、CGIスクリプト作成時の注意を参照して原因を解明するか、プロバイダやサーバー管理者に問い合わせてください。説明が難しくて分からない場合や、CGIの使用例は動作するのに、検索フォームが動作しない場合は質問メールを受け付けています。「とほほへメールを送る」を参照してください。