2006年4月より登録・修正の受付けを終了しました。
ユーザーCGIを利用される場合には、ホスティングサービスへの移行をご検討ください。
- はじめに
- avisサーバ(Webサーバサービス)の各制限
- CGIスクリプトを修正するときの注意事項
- CGIスクリプトをサーバに転送するときの注意事項
- CGIスクリプト名とPerlライブラリファイル名
- CGIの呼び出し方
- Perlのパス
- requireでPerlライブラリやCGIスクリプトを参照する方法
- sendmailのパス
- データファイルとデータディレクトリのパス(絶対パス)
- ファイルロック機能
- URLのリンク
- 登録に当たって
ご利用を希望される場合には、ホスティングサービスへの移行を検討ください。
avisサーバ(Webサーバサービス)の各制限
- avisのサーバはCGI専用のディレクトリが特定の場所に置かれています。
- ユーザーのホームディレクトリにCGIが実行出来ないようにサーバ側で設定されています。
- CGIの設置場所とデータファイルの置く場所は別になっていますので、データファイルのパスとデータファイルがあるディレクトリのパスは絶対パスで指定しなければなりません。
- ゲーム、チャット、メールマガジン(メーリングリストなども含む)、レンタル掲示板、スレッド生成機能付き掲示板、ファイルアップロード掲示板、ファイルを自動生成するCGIなど、サーバに負荷がかかるCGIスクリプトは登録をお断りさせて頂く場合がございます。(事前にお問い合わせください。)
- Perlで書かれたスクリプトのみ登録することができます。
- その他の言語(C,Shell など)で書かれたスクリプトを登録することができません。
- セキュリティーの関係で system というコマンドで直接 UNIX コマンドを使用しないでください。(登録できない恐れがあります。)
- SSIの使用が禁止されています。
- socketを利用した外部との通信は許可しておりません。
- flock関数を使ったファイルロック機能は使用できません。
- TELNETでパーミッションを変えることはできません。
- DBMファイルを使用することはできません。
- PHPファイルを使用することはできません。
- 登録はWWWサーバ管理者経由方式になります。
CGIスクリプトを修正するときの注意事項
- CGIスクリプトはテキストデータです。従いまして、CGIスクリプトの修正には、テキストエディターをご使用ください。ワードやホームページ作成ソフトなどは自動的に余計なコードを追加してしまいますので使用しないでください。
- Windows上のテキストエディターはメモ帳などがあります。
- Macintoshの場合、改行コードをUNIXサーバの改行コードに変換できるエディターをご使用ください。
CGIスクリプトをサーバに転送するときの注意事項
- サーバ上ではPerlプログラムがラインインタプリターとして1行ずつ解釈されます。従いまして、サーバに転送されたスクリプトファイルがテキストファイルでないとプログラムとして認識できません。
- サーバに転送するとき、Windowsの場合FTPソフトを使用してASCIIモード (テキストモード)で転送してください。
- バイナリモードで転送された場合、余計な改行コードが付いてしまいCGIとして認識できなくなり実行できません。
- Macintoshの場合、データ形式を Raw Data(生データ)に設定して転送してください。
CGIスクリプト名とPerlライブラリファイル名
- CGIスクリプト名のネーミング方法
CGIスクリプト名を必ず次のように統一してください。
usrid_script.cgi
ここに、usrid の代わりにユーザーのFTPログイン名を入れ替え、script の代わりにスクリプト内容を表すタイトルにしてください。
(例えば、FTPログイン名が densan で、CGIスクリプト名は bbs だとすれば、densan_bbs.cgi というふうに命名します。) - Perlライブラリファイル名のネーミング方法
jcode.pl と cgi-lib.pl を除いて pl という拡張子のライブラリファイルを使用する場合も同じ方法でファイル名を次のように統一してください。
usrid_library.pl
ここに、usrid の代わりにユーザーのFTPログイン名を入れ替え、library の代わりに元のライブラリファイルの名前にしてください。
(例えば、FTPログイン名が densan で、ライブラリファイル名は mylibrary.pl だとすれば、densan_mylibrary.pl というふうに命名します。)
ライブラリファイル名が変わることにより、ライブラリファイルを参照する方法も変わりますので、「require でPerlライブラリやCGIスクリプトを参照する方法」もご覧になって設定をしてください。
※ jcode.pl と cgi-lib.pl は、avisで標準登録をされておりますので、登録依頼は不要です。
CGIの呼び出し方
- 直接法
フォームページなどより直接CGIを呼び出す場合は次のようになります。
http://www.mydomain.xx.jp/my-cgi/usrid_script.cgi
ここの www.mydomain.xx.jp とは(登録のお知らせに書かれている)WWWサーバホスト名のことです。
また、/my-cgi/ CGIスクリプトやライブラリファイルが登録されているサーバ上のバーチャルCGIパス(仮想CGIパス)です。
※お客様のホームディレクトリに /my-cgi/ ディレクトリを作成してもCGIを呼び出すことができないだけではなく、HTMLファイル、画像ファイルなど正常に呼び出すことができなくなります。従いまして、/my-cgi/ ディレクトリ以外のディレクトリ名(例:/cgi/ など)を作成してから、CGIのファイルを転送してください。
usrid_script.cgi とは先程作成されたCGIスクリプト名のことです。
CGIスクリプトに直接CGIを呼び出す記述があれば、同じく上記のように直してください。(検索機能で調べてください)
http://www.mydomain.xx.jp/my-cgi/usrid_script.cgi - 間接法
フォームから入力されたデータをCGIに渡す場合、formタグに action の指定は次のようになります。
<form method="post" action="/my-cgi/usrid_script.cgi">
.
.
</form>
< ..... action="/my-cgi/ ....."> の /my-cgi/ は CGIスクリプトやライブラリファイルが登録されているサーバ上のバーチャルCGIパス(仮想CGIパス)です。
usrid_script.cgi とは先程作成されたCGIスクリプト名のことです。
CGIスクリプトにHTMLの記述で action でCGIを呼び出すところがあれば、同じく上記のように直してください。(検索機能で調べてください)
Perlのパス
-
CGIスクリプトの先頭の1行に必ずPerlのパスが書かれています。
独自ドメインサーバのPerlのパスは次の通りです。
#!/usr/local/bin/perl |
また、Perlのパスが書かれている行はPerlパスの記述だけにしてください。
もし、次のようにPerlのパスの後ろにコメントが入っている場合は、
#!/usr/local/bin/perl #Perlのパスはプロバイダによって違います。 |
下記のように2行に分けてください。
#!/usr/local/bin/perl #Perlのパスはプロバイダによって違います。 |
requireでPerlライブラリやCGIスクリプトを参照する方法
- cgi-lib.pl ライブラリを参照する場合
"cgi-lib.pl" というライブラリファイルがCGIスクリプトに指定されている場合、次のようになっているかどうかをご確認ください。但し、CGIにこの行が存在しない場合、わざわざ追加する必要はありません。
require "./cgi-lib.pl"; - jcode.pl ライブラリを参照する場合
"jcode.pl" という日本語処理用ライブラリがCGIスクリプトに使用されている場合、次のようになっているかどうかをご確認ください。但し、CGIにこの行が存在しない場合、わざわざ追加する必要はありません。
require "./jcode.pl"; - その他のライブラリファイルを参照する方法
その他のライブラリファイルをご使用する場合、次のように呼び出してください。
require "./usrid_library.pl";
この usrid_library.pl とは前に述べたライブラリファイル名のネーミング方法でリネームされたライブラリファイルのことです。 - 1つのCGIスクリプトから別のCGIスクリプトを参照する場合
CGIのプログラムはいくつのスクリプトから構成される場合があります。
この場合、1つのCGIスクリプトから別のCGIスクリプトを参照する必要があります。
例として、あるCGIは CGI1(usrid_script1.cgi) と CGI2(usrid_script2.cgi) から構成された場合、CGI1を呼び出す同時にCGI2を参照するとしたら、次のようにCGI1の中に require でCGI2を参照することになります。
require "./usrid_script2.cgi";
sendmailのパス
-
送信する指定がある場合 sendmail をご使用ください。
sendmailのパスは次の通りです。
/usr/lib/sendmail |
<sendmailコマンドラインオプション使用上の注意>
sendmailコマンドラインオプションが -t 以外を使われている場合、CGIからの送信ができない場合があります。よって、-t 以外( -n -s など)のsendmailコマンドラインオプションは使用しないでください。
CGIスクリプトをエディタなどで開いて、sendmailコマンドを探し、次のサンプルを参考に変更してください。
※sendmailコマンドラインオプションが付いていない場合、特に修正は不要です。
変更例1
|
↓
|
|
変更例2
|
↓
|
|
データファイルとデータディレクトリのパス(絶対パス)
- データファイルのパス
データファイルを開いてデータを読み出したり書き込んだりする場合、そのファイルのパスを絶対パスで指定しなければなりません。ここのデータファイルとは、一般、ファイルを open で開いて、データを読み出したり、加工して保存したりするファイルのことです。
例えば、下記のように open でログファイルを開く場合、
open(DB,"$logfile") || &error("Can't open$logfile");
実際のログファイル(log.data)が data というディレクトリに置かれているとしたら、ログファイルを次のように絶対パスで宣言しなければなりません。
$logfile = "/ftp/home/usrid/data/log.data";
ここの usrid とはユーザーのFTPログイン名のことです。
/ftp/home/usrid/ とはホームディレクトリの絶対パス(/ftp/home/.... から指定するパス)のことですので、データファイルの絶対パスを指定するとき必ず /ftp/home/.... から指定してください。 - ディレクトリのパス
但し、ファイル名とディレクトリを別々に記述する場合、ディレクトリのみを絶対パスで指定してください。 例えば、あるデータファイルを open で次のように開く場合、
open(DB,"$data_dir\/$logfile");
ログファイル($logfile)とデータディレクトリ($data_dir)をそれぞれ別々で宣言しなければなりません。
もし、実際のログファイル(log.data)が data というディレクトリに置かれているとしたら、ログファイルとデータディレクトリをそれぞれ次のように宣言します。
$logfile = "log.data";
# データファイル名です。パスではありません。
$data_dir = "/ftp/home/usrid/data";
# データディレクトリ($data_dir) は、絶対パス(/ftp/home/.... から指定するパス)で記入します。
# ディレクトリの最後にスラッシュを付けないようにご注意ください。
# 例では、$logfile の直前に / (スラッシュ)が付いているので、data の後に / (スラッシュ)を付けたら、
# data ディレクトリの後ろに2重スラッシュ(//)が付いてしまいます。
# データディレクトリ($data_dir) と、ログファイル($logfile) をつなげて($data_dir/$logfile)書くと、
# 次の1行となります。
# /ftp/home/usrid/data/log.data
ここの usrid とはユーザーのFTPログイン名のことです。
/ftp/home/usrid とはホームディレクトリの絶対パス(/ftp/home/.... から指定するパス)のことですので、データディレクトリの絶対パスを指定するとき必ず /ftp/home/.... から指定してください。
ファイルロック機能の注意事項
flock 関数を使ったファイルロックは、flock というコマンドの本来行われるべき排他制御が正しく動作せず、プログラムの異常を引き起こす恐れがあります。
symlink 関数を使ったファイルロックは、セキュリティに問題がありますので、symlink 関数の使用をご遠慮ください。そのため、flock 関数と symlink 関数以外の方法へ変更をして頂く必要があります。
※ファイルロック機能を「利用しない」を選択した場合は、多重書き込みによりデータの消失の恐れがあります。
ロックファイル機能が、flock 関数または symlink 関数を使われている場合は、rename 関数に変更することをお勧めします。
- rename 関数
rename 関数とはファイル名を変更する関数です。使用中はファイル名の変更により、ファイルが見つからないことで判断しています。
CGIスクリプトをエディタなどで開いて、ロック処理のサブルーチンを探して、次の説明を参考に変更してください。
# ファイルロックのパス設定
$lockfile = "/ftp/home/usrid/data/lock/lock.file";
$lockfile2 = "/ftp/home/usrid/data/lock/lock.file2";# ロック処理のサブルーチン
sub lock {
my $retry = 5; # リトライ回数セット
while (!rename($lockfile, $lockfile2)) { # リネーム。出来なければ待つ
if (--$retry <= 0) { &error("BUSY"); } # 5回ダメならあきらめる
sleep(1); # 1秒待つ
}
}# ロック解除のサブルーチン
sub unlock {
if ((-e $lockfile2) && !(-e $lockfile)) {
rename($lockfile2, $lockfile); # ファイル名を戻す
}
}
ここの usrid とはユーザーのFTPログイン名のことです。
/ftp/home/usrid とはホームディレクトリの絶対パス(/ftp/home/.... から指定するパス)のことですので、データディレクトリの絶対パスを指定するとき必ず /ftp/home/.... から指定してください。 - ファイルロックの作成
先に説明したファイルロックのパスと、ファイルロックを予めお客様で作成して頂く必要があります。(CGIスクリプトによる自動生成はご遠慮ください。)
CGIのデータファイルが保存される場所(パス)に、lock ディレクトリを作成します。例として、data ディレクトリにデータファイルやログファイルなどが保存されるとしたら、data ディレクトリの下に lock ディレクトリを作成します。
例: /ftp/home/usrid/data/lock/
lock ディレクトリを作成しましたら、FTPソフトウェアを用いて lock ディレクトリのパーミッションを「707」へ変更します。
エディタで空のファイル lock.file を作成して、FTPで lock ディレクトリに転送します。
URLのリンク
-
CGIスクリプトにURLのリンクがある場合、次のように指定してください。
<a href="/xxxxx.html"> リンク先</a> |
<a href="http://www.mydomain.xx.jp/xxxxx.html"> リンク先</a> |
ここの www.mydomain.xx.jp とは(登録お知らせに書かれている)WWWサーバホスト名で、xxxxx.html とは任意のHTMLファイルのことです。
画像ファイルも同じように指定してください。
<img src="/image/xxxxx.gif"> |
<img src="http://www.mydomain.xx.jp/image/xxxxx.gif"> |
ここの www.mydomain.xx.jp とは(登録お知らせに書かれている)WWWサーバホスト名で、xxxxx.gif とは任意の画像ファイルのことです。
登録に当たって
avisのサーバはCGI用のディレクトリが特定の場所に置かれていますので、ユーザー自身が登録できません。登録するにはWWWサーバ管理者経由の方法をとります。こちらで編集を加えないCGIであれば、無料で登録できます。
- 作成されたスクリプトを各自のホームディレクトリにASCIIモード(テキストモード)で転送してください(できれば1つのディレクトリに入れてください)。
転送できたら下記内容を support@avis.ad.jp にご連絡ください。
・「サーバ名(www.mydomain.co.jpなど)」
・「CGIのファイル名」
・「CGIファイルが転送された場所」
・「CGIスクリプトの仕様」
・「そのCGIを呼び出すHTMLのファイル名」
・「ダウンロードされたCGIでしたら、そのダウンロード先のURL」 - WWWサーバ管理者はCGIの権限設定をします。CGIスクリプトは仕様通りに動くかどうかはこちらの責任ではありませんが、できる限りCGIが動くように登録したいと思います。エラーがある場合、登録ができない(もしくは遅れる)こともあります。CGIスクリプトが動作しないとき、基本的にユーザー自身に直していただきますので、ご協力お願いいたします。こちらではできる限りわかったエラーをお知らせしたいと思いますが、忙しいときにはなかなかエラーを検出する時間もないためお許しください。
- 登録できたら、ユーザー自身に確認していただきます。
- 不都合な点がありましたら、CGIスクリプトを修正し再登録のメールを出してください。
- セキュリティーホールを検出されたスクリプトや、サーバに高負荷のかかるCGIを登録できませんので、予めご了承ください。