しらぎく絵文字変換スクリプトを実際に利用したCGIのサンプル。
しらぎく絵文字変換スクリプトを実際に利用したモバイルサイト用の簡単なCGIのサンプルです。
- このサンプルCGIのスクリプトは、配布しているスクリプトの「scripts」フォルダ内に同梱しております。
サンプルCGIスクリプトの使い方。
利用出来る条件。
サンプルCGIは、以下のような条件の元で実行出来ます。
- サーヴァがアパッチ 2.xである事
- アパッチ 1.xでも動作すると思いますが、確認が取れておりません。
- なるべく面倒な設定をしないでも設置出来るようにするため、環境変数に依存したスクリプトとなっております。
- Perlが5.xである事
- 変換スクリプトもPerlが5.x以上である事が条件です。
- サーヴァがmod_rewriteをサポートしている事
- mod_rewriteでのURLの読替機能を活用しております。
CGIの設置方法。
- まず、同梱の絵文字の代用画像ディレクトリと絵文字変換スクリプトをサーヴァに設置します。
- 続いて、同梱の sample.cgi を開いて、以下の修正を行います。
- まず、一行目のPerlへのパスをサーヴァの仕様に合わせて修正して下さい。
- 続いて、23行目前後にある変数を適宜修正して下さい。
#文書を収納している最上位ディレクトリへの相対パス(mod_perl等の場合でも相対パスで)
my $root_dir='....';#デフォルトファイル名(一種のみ)。my $index_name='index.html';- 初めの
$root_dirには、このCGIを設置したディレクトリから見た、HTML文書収納ディレクトリへの相対パスを記述します。 - 次の
$index_nameには、URLがディレクトリ名で指定された場合にデフォルトファイルとして用いるファイル名を指定します。
例えば、
- CGIのURL(この時点では予定)が
www.uso800.uso/horikita/cgi-bin/sample.cgi - HTML文書の最上位ディレクトリが
www.uso800.uso/horikita/k/ - HTML文書のデフォルト名が
index.htm
であれば、以下のようになります。
#文書を収納している最上位ディレクトリへの相対パス(mod_perl等の場合でも相対パスで)
my $root_dir='../k/';#デフォルトファイル名(一種のみ)。my $index_name='index.htm'; - 初めの
- 適切に修正したら、CGIの実行可能なディレクトリにアスキィモード(またはテキストモード)で設置します。
- CGIスクリプトの属性(パーミッション)は 700 推奨、700 で動作しない場合には、705 755 の順に試してみてください。
- ここで、実際に動作確認を行います。
PCからであれば、実際にブラウザから以下のURLを開いてみて下さい。
http://【CGIへのURL】?u=【最上位ディレクトリにある絵文字を用いている文書のファイル名】
例えば、
- CGIのURLが
www.uso800.uso/horikita/cgi-bin/sample.cgi - HTML文書の最上位ディレクトリに
www.uso800.uso/horikita/k/Homaki.htmlと言う絵文字入りのHTML文書がある
場合には、
http://www.uso800.uso/horikita/cgi-bin/sample.cgi?u=Homaki.html
と入力してみて下さい。
このとき、絵文字がGIF画像に変換されていれば成功です。
- Forbiddenが出た場合には、CGIの属性が適切でなかった事が考えられます。
- Internal Server Errorが出た場合には、絵文字変換スクリプトかサンプルCGIスクリプトの一部が修正時に破損した事が考えられます。またはサンプルCGIの一行目が適切なパスになっていないのかも知れません。
- ファイル … がありませんと表示された場合には、スクリプトは正しく動いていますが、
- 指定されたHTML文書が存在していなかったのかも知れません。正しいファイル名を指定し直してみて下さい。
- または、文書ディレクトリへのパスが正しく設定されていないため文書にアクセス出来なかった事も考えられます。この場合にはサンプルCGIの記述を見直してみて下さい。
- 絵文字の画像が正しく表示出来ていない場合には、絵文字変換スクリプトの画像へのURL指定が間違っている事が考えられます。
- CGIのURLが
- 続いて、.htaccess ファイルを作成します。
- 以下の内容の .htaccess ファイルを作成します。
- OSやエディタに依っては、.htaccess と言うファイル名を作る事が出来ない場合もあります。その場合には、可能なファイル名(htaccess.txt など)で作成し、設置後にリネームすれば良いでしょう。
RewriteEngine onRewriteCond %{REQUEST_URI} \.html$ [OR]#サイトで利用しているHTMLの拡張子。RewriteCond %{REQUEST_URI} /$#RewriteCond %{REQUEST_FILENAME} -d#RewriteCond %{REQUEST_FILENAME} -fRewriteRule (.*) /【CGIへの絶対パス】sample.cgi?u=$1 [NE,L]例えば、
- CGIが
www.uso800.uso/horikita/cgi-bin/sample.cgi
であれば、以下のようになります。
RewriteEngine onRewriteCond %{REQUEST_URI} \.html$ [OR]#サイトで利用しているHTMLの拡張子。RewriteCond %{REQUEST_URI} /$#RewriteCond %{REQUEST_FILENAME} -d#RewriteCond %{REQUEST_FILENAME} -fRewriteRule (.*) /horikita/cgi-bin/sample.cgi?u=$1 [NE,L] - 出来上がったら、HTML文書の収納最上位ディレクトリに設置します。
- このとき、OSやエディタの都合で異なったファイル名で作成した場合には、設置後にサーヴァ側のファイル名をリネームします。
- 以下の内容の .htaccess ファイルを作成します。
- 最終テストとして、実際に正規のURLでアクセスしてみて下さい。
それで絵文字が問題なく変換されていて、リンクを辿っても問題が起こらないのであれば成功です。
- Not Foundが出た場合には、.htaccess で指定したスクリプトのパスが間違っているのかも知れません。
- Internal Server Errorが出た場合には、.htaccess にエラーがあるのかも知れません。
- ファイル … がありませんと表示された場合には、スクリプトは正しく動いていますが、
- .htaccess のパスの指定が正しくないため文書にアクセス出来なかった事も考えられます。この場合には .htaccess の記述を見直してみて下さい。
- 最終テストで成功したら、.htaccessで行頭に
#が付いている以下の二行から、#を取り去ってください。#RewriteCond %{REQUEST_FILENAME} -d#RewriteCond %{REQUEST_FILENAME} -f例えば、
- CGIが
www.uso800.uso/horikita/cgi-bin/sample.cgi
であれば、以下のように書き換えます。
RewriteEngine onRewriteCond %{REQUEST_URI} \.html$ [OR]#サイトで利用しているHTMLの拡張子。RewriteCond %{REQUEST_URI} /$RewriteCond %{REQUEST_FILENAME} -d [OR]RewriteCond %{REQUEST_FILENAME} -fRewriteRule (.*) /horikita/cgi-bin/sample.cgi?u=$1 [NE,L]これは、CGIの ファイル … がありません エラーの出力に於いてエラーの分析を容易にするためサーヴァ内でのフルパスで出力するようにしている事に依ります。
通常の使用では、悪意のある者がハッキングを行うための情報として、故意に存在しないURLを指定してこのエラーを出力させてサーヴァ内のディレクトリ構造を調べるのに悪用する恐れがあるため、この二行を有効にする事で存在しないURLについては通常のHTTPエラーを返すようにしております。
しかし、最終テストの段階でこの二行を有効にすると、スクリプトが見つからなくて Not Found になったのかそれともURLで指定された文書が見つからなくて Not Found になったのか分からなくなってしまいます。
このため、テストが完了するまではこの二行をコメントアウトし、テストが完了したらコメントアウトを解いて有効にする必要があると言う訳です。
- CGIが