homeホームHTMLに役立つヒント > macwwwsrch.cgiの設置方法

■macwwwsrch.cgiの設置方法


現在のバージョンは3.09m0.7です。2001/5/16ver.Up
(単にMACperl対応にした3.09m0.1も作りました。)

2001/10:え〜と、MAC OS Xの発売を受けて、MAC perlバージョンの存在意義はなくなったと思われますので(だってホンチャンUNIX perlが動くもん)、以後、バージョンアップはしません<(_ _)> 僕自身が使わなくなっちゃったんだよ〜(^^;

[改定日: 06/07/28 13:00]


■ 目次 ■


●macwwwsrch.cgiについて ▲ページトップ

 macwwwsrch.cgiは「とほほのWWW入門」でとほほさんが配布されている「検索フォーム(wwwsrch.cgi)」の改造版です。開発されたとほほさんに感謝いたします。改造版も再配布自由という太っ腹はすごいです(とほほさんの利用条件
 本家を元に、自分で使いたい機能を盛り込んだのがmacwwwsrch.cgiです。


●改造点 ▲ページトップ

 オリジナルのwwwsrch.cgiから改造した点は次の通りです。

 検索結果イメージはこんな感じです(←別窓で開きますので以下の説明を読みながら見てください。)

実際にこちらで稼働しています。

 本家と比べて見た目が若干変わっているという程度で、機能が増えているというわけではないです。それどころか、処理が多くなってますから、確実に本家より動作は遅くなっているはずです。サーバ負荷がその分増えるということにご注意ください。

 また、設定部分が飛躍的に多くなっちゃったんで、このファイルを一読しただけで理解できるかどうか…(^^; いらない機能はガンガン切って設置するのがよいでしょう。


●MacPerl上で動かすために ▲ページトップ

 MacPerl上で動かすためには、

  1. MACがサーバとして動いていること、
  2. MacPerlがインストールされていること

 が前提です。

 どちらもやってみると恐ろしく簡単です。「MACでperl」で解説しているので参照してください。MacPerlのダウンロードを除いて5分程度でできます。ホントにあっさり動いたので僕もビックリしました。

 OS X以降ではUNIXベースですからMacPerlではなく通常のUNIX Perlになります。OS XをCGIサーバとして機能させれば(「MAC OS X Darwin Tips」参照)UNIX Perlの設定で動きます。OS X標準ではperlが動いていませんので動きません。
 OS9以前では、MACperl上の動作となります。


●ダウンロード ▲ページトップ

必要なファイルは次のとおりです。

1.macwwwsrch_fol.zip
 macwwwsrch3097_fol.zipをダウンロードしてください。
 中身はmacwwwsrch.cgi、easy_s.ph、easy_s_vari.phのセットと、説明書です。

 macwwwsrch.cgi CGI本体です。
 easy_s.ph 簡単検索のHTMLファイルです。簡単検索を使わない場合は必要ありません。
 easy_s_vari.ph 簡単検索の変数ファイルです。簡単検索を使わない場合は必要ありません。
 簡単検索については後述します。

 (単にMACperl対応にした3.09.m0.1バージョンはmacwwwsrch_309m1.zipをダウンしてください。設置は本家「検索フォーム設置方法」とこのページのこのあたりを参照してください。)

2.jcode.pl
 これは、歌代さんが作成された日本語関係のツール集です。この中の機能を呼び出して使っています。ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/ で入手してください。

●設置場所

●UNIXの場合

 本家wwwsrch.cgi通り次のような構成にします(これ以外の構成でも動きますけど一応)。
 プロバイダによっては、特定のcgi-binフォルダにcgiを入れなくてはいけないところもありますが、そうした場合の検証はしていません。後述の設定で、検索対象ディレクトリをうまく指定することで動作可能と思われます。

 /home/name
   +-----------cgi-bin ……cgi格納用ディレクトリ。作成してください
   |        +-----macwwwsrch.cgi
   |        +-----jcode.pl
   |        +-----easy_s.ph
   |        +-----easy_s_vari.ph
   |        +-----アイコン画像ファイル
   |
   +-----------html ……検索させたいディレクトリ
   |        +-----aaa.html
   |        +-----bbb.html

●MAC perlの場合

 検索するディレクトリ直下に裸でおきます。残念ながら、MACperlの場合は「上のディレクトリ」を検索対象にできないんです。ディレクトリ名をハッキリ指定する場合はできますが(ここを参照)。どうしてもという場合は、このcgiと同じ階層に、検索対象ディレクトリのエイリアスを置いてください。とりあえず検索はできるようになります。この場合、検索結果の変換をする必要があります。

 /home/name
   +-----------html ……検索させたいディレクトリ
   |        +-----macwwwsrch.cgi
   |        +-----jcode.pl
   |        +-----easy_s.ph
   |        +-----easy_s_vari.ph
   |        +-----アイコン画像ファイル
   |        +-----aaa.html
   |        +-----bbb.html


●設定 ▲ページトップ

 macwwwsrch.cgiの中の設定をします。次の赤い部分を書き換えます。

====================== macwwwsrch.cgiの最初の1行目 ======================

#!/usr/local/bin/perl

 プロバイダの設定に合わせて変更します。これで動かなければ「#!/usr/bin/perl」あたりで動くと思います。それでも動かないときはプロバイダにperlのありかを尋ねてください。telnetができるなら、「which perl」コマンドでありかがわかります。
 MacPerlで動かす場合は無視してください。

====================== macwwwsrch.cgiの設定部分 ======================

# ========= 基本設定

$pc = "1"; # UNIX Perlは0、Mac Perlは1

 MacPerlで動かすかUNIX perlで動かすか、ここで決めて下さい。UNIX Perlは0、Mac Perlは1 にします。

$cgi_name = "macwwwsrch.cgi"; #このcgiの名前

 cgiファイル名を別の名前にした場合はここを変更します。

$target_dir = ''; # 検索対象ディレクトリ。UNIXは絶対・相対パスで指定する(同じディレクトリなら'.')、MACは空にする

 UNIXの場合は上記の例で言うと「$target_dir = '../html';」(htmlディレクトリ以下)や「$target_dir = '..';」(/home/name/以下の階層全部)などと指定します。特定のcgi-binフォルダにcgiを入れなくてはいけないプロバイダの場合、この設定をうまく指定してください。
 MAC perlの場合はちょっとややこしいので下にUNIXとまとめて下に表にしました。

    同じディレクトリ 1つ上のディレクトリ 2つ上のディレクトリ
UNIX perl 相対ディレクトリを指定 '.' '..' '../../'
ディレクトリ内の特定ディレクトリを指定 './name' '../name' '../../name'
MAC perl 相対ディレクトリを指定 '' 不可 不可
ディレクトリ内の特定ディレクトリを指定 ':name' '::name' ':::name'

さらに、UNIXの場合は半角スペースで区切ることで複数のディレクトリを指定することができます。MACではこの機能は使えません。腕が悪くてすみません。

例:'. ../name' → 同じディレクトリと、一つ上のディレクトリのnameディレクトリ。

$searchname = "コンパクトカメラデータ"; # 検索システムの名前。○○検索と表示される

 空にするとオリジナル通り「検索」とだけ表示されます。その場合は「○○の内容を検索します」という表示もなくなります。


# ========= 戻り先の設定

$return_name = "コンパクトカメラデータ"; # 戻るボタンの名前

 「戻る」ボタンの名前です。空にすると「へ戻る」と表示されますので、「インデックス」「ホーム」などとするのがよいでしょう。

$return_url = 'index.html'; # [戻る]ボタンURL。

 上のボタンの戻り先URLです。相対パス、絶対パスのどちらでもかまいません。

$return_name_b = 'コンパクトカメラページ'; #2つ目の [戻る]ボタンの名前。

 2つ目の「戻る」ボタンの名前です。なくても可です。

$return_url_b = '../index.shtml'; #2つ目の戻り先URL。いらない場合は空に

 2つ目の戻り先のURLです。相対パス、絶対パスのどちらでもかまいません。必要なければ空にしてください。2つ目の戻り先は表示されなくなります。2つ目の戻り先を表示する/しないはここが空かどうかで判定しています。

$hint_name = '検索のヒント'; #3つめの [戻る]ボタンの名前。ヒント表示用として作った。

 3つ目の「戻る」ボタンの名前です。なくても可です。ヒント表示用に作ったため、変数名が違っているけど気にしないでください。

$hint_url = 'searchHINT.htm'; #3つめの戻り先URL。いらない場合は空に

 3つ目の戻り先のURLです。相対パス、絶対パスのどちらでもかまいません。必要なければ空にしてください。3つ目の戻り先は表示されなくなります。3つ目の戻り先を表示する/しないはここが空かどうかで判定しています。


# ========= 検索ファイルの設定

#$sufix{".txt"} = 1; # 拡張子 .txt を検索する場合は行頭の#を削除

 「.txt」ファイルも検索対象にしたいなら行頭の「#」を削除して
  $sufix{".txt"} = 1;
 としてください。

#$sufix{".htm"} = 1; # 拡張子 .htm を検索するは行頭の#を削除

 上のtxtと同じです。.htmファイルを検索したい場合は行頭の#を外してください。

$sufix{".html"} = 1; # 拡張子 .html を検索する

 普通はhtmlファイルを検索すると思いますのでこのままでよいです。htmlを検索したくないなら行頭に「#」を付けるか、「1」を「0」にします。


# ========= ログの設定

$do_logging = 1; # 検索キーワードのログ(日付・時間・ホスト・単語)

 検索キーワードのログを取るかどうかです。必要なければ「0」とします。

$logfielname = "macwwwsrch.log"; # ログファイル名

 ログファイルの名前です。記録されるのは日付・時間・ホスト・キーワードです。必要があればファイルネームを変更します。このファイルは自動的にcgiと同じ階層に作成されます。

$do_openlogging = 1; # 公開用キーワードログ(単語のみ)

 公開用のログファイルを作るかどうかです。記録されるのはキーワードだけです。必要なければ「0」とします。

$openlogfielname = "macopensrch.log"; # 公開用ログファイル名

 公開用ログのファイル名です。必要があればファイルネームを変更します。このファイルは自動的にcgiと同じ階層に作成されます。


# ========= 結果表示の設定

$how_many_lines = 2; # マッチした行の前後何行を表示するか

 必要と思う行数を入力してください。

$cashe = 1; # キャッシュOFFなら0、ONなら1
#  ↑検索結果ページのソースを見られてもいい場合はキャッシュONにします

 この設定は、実は「ページソースを見られてもいい/悪い」という意味ではないです。
 キャッシュは、ブラウザが以前アクセスしたときの情報を取っておく機能のことで、キャッシュOFFでこの機能を殺します。ONになっていると、次にアクセスしたときビジーでつながらなかったりすると、古いキャッシュデータが表示されてしまいます。検索エンジンとしては内容に変化があったのに反映されないということになってしまって、これは避けたいことなんですね。このためにキャッシュを殺して(OFF)にして最新情報を表示させるというのが本当の目的(と僕は理解しているんですけど、違うのかな)。本家wwwsrch.cgiでは殺してあります。
 僕は、ソース見たいし、まいっか、とばかりにONにしました。このON/OFFを好みでコントロールできるようにしてあります。
 また、ONにすると、例えば全ファイルを検索・表示させた後、そのソースを保存するとサイトの全マップができることになります。ま、全ファイルに共通のキーワードが組み込まれていないとできませんが。


# ========= 結果表示の設定2

$cputime = "1" ; # 消費時間を表示するときは1、しないなら0

 検索にかかったCPUの時間を表示するなら1、しないなら0にします。

$img_name = "mark1.gif" ; # アイコンファイル名。ファイルはcgiと同じ階層におく。空なら表示しない

 検索結果のページタイトルの前に表示する「別ウインドウ表示用アイコン」のファイル名です。アイコンファイル自体はcgiと同じ階層におきます。
 ここにファイルの指定がある時とないときで、検索結果表示後の動作が次のように変わります。

  別窓アイコン ファイルタイトル ()内のファイル名
$img_nameに指定有り 表示・別窓で開く 同じ窓で開く 同じ窓で開く
$img_nameに指定なし 非表示 別窓で開く 同じ窓で開く

 アイコンは適当に作ってください。面倒だったら、これ↓をダウンロードして使ってください。いずれもオリジナルです。有名どころをまねして作りました。

アイコン例1:  アイコン例2:


# ========= 簡単検索の設定

$easy = "1"; # 簡単検索をするなら1、しないなら0

 簡単検索を使うなら1にします。この場合、下の二つも設定する必要があります。簡単検索を使わなければ「0」にします。下の二つのファイルも必要ありません。

簡単検索とは:あらかじめよく検索される単語を登録しておき、ユーザーはリストの中から選択するだけでキーワードを追加できるようにするもの。

$easy_filename = "easy_s.ph"; # 簡単検索設定ファイル名

 簡単検索部分のHTMLを記述するファイルです。 selectタグで記述することが前提になっています。今のところ変数の引き渡しがうまくいかず、 TYPE="radio"や TYPE="checkbox"は使えません。なお、<select multiple 〜>としてmultiple指定は使えます。
 その他の注意点としては、「<form></form>タグを記述しない」ことです。formタグはcgiが出力するので、<select>〜</select>タグだけを記述してください。
 
 ここで指定した名前で簡単検索用のファイルを作成してください。EUC/LFにしてください。付属の「easy_s.ph」は作成例です。

<select name="hensuu1">
<option value="" selected>指定なし
<option value="うーむ">うーむ
</select>
<select name="hensuu2">
<option value="" selected>指定なし
<option value="とほほ">とほほ
</select>
<select name="hensuu3">
<option value="" selected>指定なし
<option value="全文検索">全文検索
</select>

$easy_s_vari = "easy_s_vari.ph"; # 簡単検索の変数設定ファイル名

 変数取り込み用のファイル名を指定します。上で簡単検索のHTMLを記述したら、<select name="xxxxx">の「xxxxx」部分だけを記述します。上の例でいうと、「hensuu1」だけを記述します。記述は「変数名+改行」だけです。付属の「easy_s_vari.ph」は設定例です。

hensuu1(改行)
hensuu2(改行)
hensuu3(改行)


# ========= 全角英数字=>半角英数字変換の設定
$zen_henkan = "1"; # 全角を半角に変換するなら1、しないなら0

 全角英数字で入力されたキーワードを自動的に半角英数字に変換する機能。全角英数字と半角英数字を区別して検索したいなら、この機能は使ってはいけません。


●その他の改造
 「検索対象のディレクトリを複数指定する方法」「検索結果のジャンプ先を変更する方法」は、本家「検索フォーム設置方法」と同様です。そちらを参照してください。

●MACで他のディレクトリを検索する
 cgiと同じディレクトリに、検索させたいディレクトリのエイリアスをおいてください。
 ただし、検索結果がおかしくなります。仮にaaaディレクトリにcgiをおき、直下にbbbディレクトリのエイリアスをおいたとします。

+----bbb(本体)
+----aaa
   +----macwwwsrch.cgi
   +----bbb(エイリアス)
   +----ccc

 すると、aaaディレクトリ以下は正常にリンクできますが、エイリアスであるbbbディレクトリは「aaa/bbb/xxx.html」といったようにaaaディレクトリ直下のディレクトリとして扱われます。これはMACの仕様からそうなるんですね。ここは本来「../bbb/xxx.html」とリンクしたいところです。
 そこで、cgiに手を入れる必要があります。

 macwwwsrch.cgi の「# MACのエイリアス対策」という行の次に次のような行があります。

# MACのエイリアス対策
# $target =~ s|bbb/|../bbb/|; # リンク先の変換。行頭の「#」をとってbbb/、../bbb/を書き換える。

$target =~ s|bbb/|../bbb/|;」は文字列1文字列2に置換するということです。うまく本来のbbbディレクトリにリンクするように書き換えてください。
 また、行頭の「#」は削除します。

$target =~ s|CAMEdata/|../CAMEdata/|; # リンク先の変換。行頭の「#」をとってbbb/、../bbb/を書き換える。

 こんな感じにします。


●パーミッションと漢字コード ▲ページトップ

 以下の説明で、パーミッション、改行コード、漢字コードなどがわからなかったら、本家「とほほのWWW入門」を参照してください。丁寧に解説されています。

 UNIX(含むMac OS X)サーバに設置する場合は次のようにします。

ファイル パーミッション 改行コード 漢字コード
macwwwsrch.cgi 755 LF EUC
easy_s.ph 666 LF EUC
easy_s_vari.ph 666 LF EUC
jcode.pl 644 LF EUC

 MACに設置する場合は次のようにします。

パーミッションは関係ありません。漢字コードもEUCでもSJISでもOKです。しかし、できればEUC/CRをお勧めします。OS Xの場合は上のUNIXサーバと同じにします。

ファイル ファイル形式 改行コード
macwwwsrch.cgi MacPerl実行ファイル CR
easy_s.ph 通常のTEXTファイル CR
easy_s_vari.ph 通常のTEXTファイル CR
jcode.pl 通常のTEXTファイル CR

 MacPerl実行ファイルは、MACperlでmacwwwsrch.cgiを開き、「CGI Script」に指定して保存し直すと作成できます(こちらを参照)。

 UNIX/MAC、どちらの場合もあとはブラウザでmacwwwsrch.cgiにアクセスすれば動くはずです。


●うまく動かなかったら ▲ページトップ

・UNIXPerl(含むMac OS X)の場合、以下をチェックしてみてください。
 macwwwsrch.cgi、jcode.plの漢字コードはEUCですか? 
 macwwwsrch.cgi、jcode.plの改行コードはLFですか? 
 パーミッションはキチンと設定されていますか?
 jcode.plはcgiと同じディレクトリにありますか?

 MAC OS Xの場合は、perlが動作しているか、CGIが許可されているか確認してください(Mac Perlで動かすために」参照)。

・MacPerlの場合、以下をチェックしてみてください。
 macwwwsrch.cgi、jcode.plの改行コードはCRですか?MACでperl」参照
 macwwwsrch.cgiはMacPerlで実行ファイルに変換されていますか?MACでperl」参照
 MACはサーバとして機能していますか?MACでperl」参照
 MacPerlはインストールされていますか?MACでperl」参照
 jcode.plはmacwwwsrch.cgiと同じディレクトリにありますか?(MACperlにjcode.plがインストールされていても無駄です。同じ階層にある必要があります)

 MacPerl上では、ヒット数があまりに多いと「CGI もしくはサーバ内部のコンポーネントがリクエストされた動作を完了できませんでした。 」と表示されて動作が完了しません。メモリ割り当て量を変更してもダメでした(;_;) どうもUNIXperlとMACperlでは、細かいところで動作が違う気がします。

 それでもダメなら「マニュアルに書いてない掲示板」で質問してください(このページの一番下を参照)。分かる範囲で手助けします。


●変更履歴 ▲ページトップ

3.09m0.9 2001/6/15 未公開 wwwsrch.cgi ver.3.09ベース
・検索単語に半角カナがあった場合、全角カナに変換するオプションを追加。

3.09m0.8 2001/5/17 未公開 wwwsrch.cgi ver.3.09ベース
・MACでも複数ディレクトリを検索対象に指定できるようになった。しかし、MACの場合、指定できるディレクトリに制限有り。(自分のために半角英数字変換機能に,./も追加。cgiに手を入れなくてはならない)

3.09m0.7 2001/5/16 wwwsrch.cgi ver.3.09ベース
・ベースとなる本家のバージョンが3.07から3.09に上がりました。これに伴い、わかっているところでは次のような変更がありました。

●オリジナル3.09で変更・追加された機能
・見つけたファイル数を数えるようになった
・検索の高速化
 ・検索対象ファイル(指定方法が変更された)
 ・下位フォルダ検索する/しないの指定
 ・検索対象ファイルの漢字コードの指定
・検索結果にファイル名を表示する/しないの指定
・bgcolorなどのデザインの指定
・デバッグモードを使うかどうか
・検索対象ディレクトリの複数指定が可能になった

 上記の変更の他、3.09m7では次の追加があります。

●3.09m7で追加された機能
・検索日時の出力ができるようになった。

 本家3.09は、3.07と比べて、特に複数の単語による検索が飛躍的に速くなっています(検索テスト参照)。macwwwsrchも3.07m0.6ユーザーの方は、是非3.09m0.7にアップすることをお勧めします。

3.07m0.6 2001/3/19 wwwsrch.cgi ver.3.07ベース
・全角英数字で入力されたキーワードを、半角英数字に変更する機能を追加。

3.07m0.5 2001/3/9(2001/3/16初公開) wwwsrch.cgi ver.3.07ベース
・簡単検索の変数取り込みも外部ファイルから行えるようにした。これによって、外部ファイルをいじるだけで簡単検索が変更できるようになった。

3.07m0.4 2001/3/2(未公開) wwwsrch.cgi ver.3.07ベース
・簡単検索機能を追加した。設定ファイルで簡単検索が設定できるが、変数の取り込みは本体をいじる必要がある。

3.07m0.3 2001/2/26(未公開) wwwsrch.cgi ver.3.07ベース
・元のバージョンが3.07になった。
・ログ出力をタブ区切りで出力するようになった。
=== なお、ベースのwwwsrch.cgiは3.05→3.07で以下の変更がなされました。
 Ver3.07:@ARGVで引数を受け取れないサーバーに対応。
 Ver3.06:複数の全角スペースがあるときの不具合を修正。

3.05m0.2 2000/10/21(未公開) wwwsrch.cgi ver.3.05ベース
・タイトルの前に別窓アイコンを付けられるようにした。
・処理時間を測定できるようにした。
・キャッシュのON/OFFができるようにした(cashとはページソースを見られていいかどうかのことです。検索を高速化するためのキャッシュではありません)

3.05m0.1 2000/5/20(未公開) wwwsrch.cgi ver.3.05ベース
・変数($pc)を変更することでUNIX/MAC両対応にした。
 Macintosh版への改造はmogawaさんの「日本語全文検索システムのページ」を参考にさせていただきました。有用なページをありがとうございます。
・公開用のログを出力できるようにした。
・検索対象ページの名前を設定部分で変更できるようにした。複製するときに便利。
・戻りボタンを2つまで設定できるようにした。
・検索結果にナンバリングするようにした。
・最後にヒット数を表示するようにした。
・キーワードを赤で表示するようにした。


●利用条件 ▲ページトップ

 本家wwwsrch.cgi同様、このCGIスクリプトも「無断で利用・改造・修正・再配布可能」です。確認メールも必要ありません。出典明記もしなくてよいです。
 ただし、このCGIを使用して被った損害はいっさい補償しません。

 また、macwwwsrch.cgiに関するご質問等は、とほほさんではなく、水沢・penguin-19・和彦宛にお願いします。


 要望・バグ・動かないよなどは「マニュアルに書いてない掲示板」までお願いします。

作者:水沢・penguin-19・和彦


homeホームHTMLに役立つヒント > macwwwsrch.cgiの設置方法