自作CGIの設置について
自作CGI設置の際のご注意
自作CGIをご利用になるにはperlの知識が必要となります。
自作CGIスクリプトの動作確認はお客様自身で行ってください。
インターネットマンションヘルプデスクでは自作CGIスクリプトに関する質問には一切お答えできません。
セキュリティホールのある自作のCGIを設置した場合には、お客様のホームページを他人に消去されたり書きかえられたりする可能性があります。
自作CGIの設置には、十分ご注意下さい。
万一、お客様が設置されたCGIの不具合によるセキュリティ上の問題が発生しても弊社は一切責任を負えません。また、他のお客様に迷惑がかかったり、運用上必要な場合には、お客様にお断りすることなくページを削除させていただくことがございますのでご了承ください。
バックアップは必ずお客様のパソコンに保存しておいてください。万一、ホームページが破損しても、弊社では理由の如何に関わらず一切責任を負えません。
自作CGIの設置について
1. 自作CGIの設置に関して
WebServerのOS,ソフトウェアは?
WAKWAKのカスタムCGIにて呼び出すことのできる外部プログラムはperl及びsendmailのみです。それ以外の外部プログラムはご利用になれませんのでご注意ください。SSIに関しても申し訳ございませんがご利用いただけません。カスタムCGIで使える言語は?
WAKWAKのカスタムCGIにて呼び出すことのできる外部プログラムはperl及びsendmailのみです。それ以外の外部プログラムはご利用になれませんのでご注意ください。SSIに関しても申し訳ございませんがご利用いただけません。perlは?
現在のバージョンはperl 5.20.3です。なお、今後予告なくバージョンアップすることがございます。CGIスクリプトの実行環境は?
CGIスクリプトは、ホームページ所有者のユーザID、グループIDにsuid、sgidされて実行されます。Telnetは利用できますか?
ご利用になれません。WAKWAK以外で配布されているCGIを利用する場合は?
相対パス及び絶対パスの表記が使用可能です。パーミッションは777でも動作致しますが、セキュリティの観点から755と設定されることをお勧めします。同時に実行できるCGIの数は?
WAKWAKでは、お客様ごとに同時に実行できるCGIの数を5つに制限しております。今後、予告なく変更となる場合があります。お客様のCGIスクリプトにアクセスが集中した場合、「CGI Busy」というメッセージが表示されます。表示された場合は、しばらく時間をおいてから再度アクセスしてください。
2. CGIスクリプトを書く上での注意点
-
自作CGIの呼び出し方法は?
自作CGIは/cgi-binの下に置きます。例えば/cgi-bin/test.cgiを置いた場合、それを呼び出すためのURLは
http://enjoy.pial.jp/~yyyy/cgi-bin/test.cgi
になります。(yyyyにはFTPログインIDが入ります。)
-
perlのパスは?
perlのパスは/usr/local/bin/perl([/usr/bin/perl] [/bin/perl]も利用可能です。)です。スクリプト先頭行には#!/usr/local/bin/perlと記述して下さい。
-
CGIスクリプト中のパス表記は?
CGIスクリプト中のパス表記はCGIスクリプト本体が同じディレクトリにある時は、CGIスクリプト本体からjcode.plを呼び出すのに
require './jcode.pl'; # 相対パス表記
と記述する事が可能です。
または、require '/cgi-bin/jcode.pl'; # 絶対パス表記
と記述することもできます。
なおCGIスクリプトのパーミッションは755(-rwxr-xr-x)に設定して下さい。777(-rwxrwxrwx)でも動作しますが、セキュリティの観点から755に設定される事をお勧めします。
-
perlのライブラリは?
perlのライブラリをご利用になる場合はperl 5.20.3標準添付のライブラリはご利用いただけます。ただし会員様ご自身でライブラリをuploadすれば独自のライブラリもご利用可能です。その際にもスクリプト中のパスの指定にはご注意下さい。
例えばmyperllib.pmというライブラリを入れるには/cgi-bin/myperllib.pmにupload後、CGIスクリプト中に
require '/cgi-bin/myperllib.pm';
もしくは
BEGIN {unshift(@INC,'/cgi-bin/');} use myperllib;
というように記述して下さい。
また3と同様に相対パス表記で記述する事も可能です。use Socket;自体は動作しますが、Socketで通信を許しているのはlocalhostへのsmtp/tcpのみとなります。/cgi-bin/myperllib.pmのパーミッションは666(-rw-rw-rw-)でも動作しますが、644(-rw-r--r--)に設定される事をお勧めします。
-
例えばCGIスクリプト本体及びjcode.plが/cgi-binの直下にあり、CGIスクリプト本体からjcode.plを参照したい場合は
require './jcode.pl';
などと記述してください。
-
同様に/public_html/aaa.htmlというHTMLファイルをCGIスクリプト本体から参照する場合も
$aaa = '/public_html/aaa.html';
など相対パス、絶対パスいずれかの表記での記述が必要となります。
■アップロード先の/public_html及び/cgi-binのディレクトリアクセス権は変更しないでください。ディレクトリのパーミッションは755(-rwxr-xr-x)です。
-
3. ホームページサービスのディレクトリについて
ホームページサービスでお客様がご利用になられるホームディレクトリは次のような構成になっております。FTPでお客様のホームディレクトリにログインされますと6つのディレクトリが見えると思います。
それぞれのディレクトリの役割は以下の通りです。
-
/public_html
お客様のホームページを置いてください。またTopPageのindex.html及びindex.htmは必ず/public_html直下に置いてください。それ以外の場所に置かれますとお客様のホームページが正常に表示されません。
また、jpgやgifなどのimageファイルもこの/public_htmlディレクトリの下にアップロードしてください。 -
/cgi-bin
お客様の作成された自作CGI及びライブラリなどは必ずこのディレクトリ直下に置いてください。それ以外の場所に置かれますとお客様の作成されたCGIが正常に動作しない場合があります。
また、cgi以外のhtmlファイルやjpg、gifなどのimageファイルなどは/cgi-binディレクトリの下に置かれても正常に表示されませんので、ご注意ください。 -
/bin、/dev、/lib、/etc
システム利用領域です。お客様はご利用になれません。
4. CGIのパスについて
-
自作CGIのパスの書き方は?
CGIファイルをアップロードしたのにCGIが正常に動作しないお客様やCGIファイル中のパスの表記の仕方が分からないというお客様は、下の表をご参考にHTML,CGIファイル中のパスの書き方をご確認ください。
HTMLファイルからWAKWAKアクセスカウンタCGI及び自作CGIを呼び出す場合と、自作CGIスクリプトファイルからWAKWAKアクセスカウンタCGI及び自作CGIスクリプトを呼び出す場合とでは記述の仕方に次のような違いがあります。
HTMLファイル上での記入方法 WAKWAKアクセスカウンタCGIを呼び出す際のパス設定
http://enjoy.pial.jp/cgi-bin/Count.cgi
もしくは/cgi-bin/Count.cgi自作CGIを呼び出す際のパス設定
http://enjoy.pial.jp/~yyyy/cgi-bin/test.cgi
もしくは/~yyyy/cgi-bin/test.cgiCGIファイル上での記入方法 WAKWAKアクセスカウンタCGIを呼び出す際のパス設定
http://enjoy.pial.jp/cgi-bin/Count.cgi自作CGIを呼び出す際のパス設定
http://enjoy.pial.jp/~yyyy/cgi-bin/test.cgi
もしくは/~yyyy/cgi-bin/test.cgi上記の記述をファイルに記入する事により指定したHTML,CGIファイルを呼び出す事ができます。もし、お客様の作成されたCGIが正常に動作しない場合はhttp://enjoy.pial.jp/~yyyy/cgi-bin/test.cgiのようにフルパスでファイルを指定してみるなどいくつかの記述を試して見てください。
注)yyyyにはお客様のFTPログインIDが入ります。
-
自作CGIから画像ファイル(jpg,gifファイル)を呼び出すには?
CGIのファイルからjpgやgifなどのimageファイルを呼び出すには、以下の方法で表示させることができます。
jpg、gifなどのimageファイルは、必ず/public_html以下にアップロードしてください。/cgi-binの下にアップロードしても画像を表示させることはできません。
CGIスクリプトファイルからjpg,gifなどのimageファイルを呼び出す際は次のように記述してください。CGIスクリプトから/public_html/images/ttt.jpgを呼び出す際は、CGIスクリプトファイルに次のようにファイルをご指定ください。
/~yyyy/images/ttt.jpg
もしくは
http://enjoy.pial.jp/~yyyy/images/ttt.jpg
とフルパスでご記述ください。
注)yyyyにはお客様のFTPログインIDが入ります。
1.に記述してあるhtml及びCGIからCGIを呼び出す際のパスの表記と2.に記載されたCGIからimageファイルを呼び出す際のパスの表記は記述の方法が異なりますのでご注意ください。
5. CGIのパーミッションについて
-
CGIファイルのパーミッション(アクセス権限)は?
ファイルなどをアップロードする際はセキュリティの観点からお客様のアップロードされるディレクトリやファイルに次のパーミッション適用される事をお勧めします。
ディレクトリ 755(-rwxr-xr-x) htmlファイル 644(-rw-r--r--) CGIファイル 755(-rwxr-xr-x) *.plなどのperlのライブラリ 644(-rw-r--r--) お客様のご使用になられているFTPソフトによってはアップロードした際にディレクトリやファイルのパーミッション(アクセス権限)を自動で書き換えてしまうソフトもあるかもしれませんので、もしアップロードしたのにCGIが正常に動作しない、または画面に表示されないなどといった場合はご利用になられているFTPソフトの設定及びお客様ホームディレクトリにある/public_htmlや/cgi-binなどのディレクトリのパーミッションもご確認ください。
6. CGIでメールを出すには
-
CGIでメールを出す際の注意
CGIスクリプト中にsendmailのパスとして/usr/lib/sendmail([/usr/sbin/sendmail] [/lib/sendmail]も利用可能です。)を記述していただく事によりCGIでsendmailを呼び出すことが可能です。
例えば$sendmail =/usr/lib/sendmail
open(MAIL,"| $sendmail -t");など/usr/lib/sendmailを明示的に指定していただくことによりCGIからメールを出すことが可能となります。
なお、wakwakのsendmailは送信前にFromアドレスの書式チェックを行っています。Fromアドレスの書式が正しくなかったり、メールアドレスとして使えない文字(例えば \ など)を含んでいた場合、メールは送信されません。sendmailを使用してメールが発信されない場合、Fromアドレスが正しいものかどうかも合わせて確認してください。
7. アップロードする際の注意
CGIプログラムをアップロードされる際は、以下の点についてご注意ください。
(1) ascii modeで転送する
(2) CGIプログラム作成時に予め改行コードをLFのみに設定する
のいずれかの方法でCGIプログラムをアップロードしてください。
binary modeでCGIプログラムをアップロードされますと改行に^Mが付いてしまいます。CGIプログラム先頭行の
#!/usr/local/bin/perl
も、
#!/usr/local/bin/perl^M
となってしまい、/usr/local/bin/perl^Mという存在しないプログラムを起動しようとしてしまいエラーとなってしまいます。
ftpで正しくascii modeで転送されていればこの問題は起きませんが、お客様のご利用になられているftpソフトによっては初期設定でファイルをbinary modeで転送してしまうものもございますので、アップロードされる前にご利用になられているftpソフトの設定を一度ご確認されてからアップロードしてください。
CGIスクリプトだけでなくHTML等のテキストファイルはascii modeで転送されることをお勧め致します。
ただし、PNG、JPEG、GIF等の画像データはascii modeで転送されるとファイルが壊れ、正しく表示されませんのでbinary modeで転送されることにご注意ください。
また、上記のような^Mの改行コードが付いてしまう問題はスクリプト先頭行#!/usr/local/bin/perlの後ろに「-」を付けていただくことによって回避できる場合もございますのでCGIプログラムが正常に動作しないといったお客様は一度
#!/usr/local/bin/perl
の先頭行を
#!/usr/local/bin/perl --
と記述していただいてCGIが正常に動作するかご確認ください。
8. 自作CGIの動作確認
以下の方法でCGIの動作確認とCGIプロセスの強制終了を行なえます。
下記のページをご利用になられることで,お客様の作成された自作CGIの動作確認および自作CGIプロセスの強制終了を行なうことが可能です。詳しくは自作CGIの動作確認をご覧下さい。
自作CGIの構文チェックのページ
お客様ホームディレクトリの/cgi-bin配下に置かれている自作CGI及びライブラリの構文チェックを行なうには自作CGIの構文チェックのページをご利用下さい。
空欄にお客様のアップロードされた自作CGI(xxxxx.cgi)、ライブラリ(xxxxx.pl)の.cgi .plより左の部分を入力し、空欄の右にあるタブで[.cgi]か[.pl]を選択し[確認]ボタンをクリックしていただくと自作CGIの構文チェックが行えます。自作CGIのデバグ設定の登録・解除のページ
お客様の作成された自作CGIをデバグモードで実行するには自作CGIのデバグ設定の登録・解除のページをご利用下さい。
変更後のデバグ状態を選択し、実行ボタンをクリックしていただくとCGIのデバグモードへと移行します。注)デバグが済んだら必ず[デバグ解除]を行ってください。デバグ中のままだと、全ての自作CGIが動作しません。
自作CGIプロセス強制終了のページ
お客様の作成された自作CGIを強制終了するには自作CGIプロセス強制終了のページをご利用下さい。お客様側で、CGIプロセスの動作を強制的に終了させることが可能です。
9. もう一度ご確認下さい
「CGIファイルをアップロードしたのに正常に表示されない!」「htmlファイルからCGIファイルが呼び出せない!」といった場合はもう一度以下の点についてご確認ください。
1. | CGIプログラムはcgi-binの下に置きましたか? → cgi-binのディレクトリ直下に転送してください。 |
---|---|
2. | perlのパスは正しく設定していますか? → 一行目は#!/usr/local/bin/perlにしてください。 |
3. | ascii modeでアップロードしましたか? → CGIプログラムはascii modeでアップロードしてください。 詳しい説明はこちら・・・アップロードする際の注意 |
4. | パーミッションを正しく指定していますか? → お客様のアップロードされたファイルのパーミッションをご確認ください。 詳しい説明はこちら・・・CGIのPermissionに関して |
注)CGIスクリプト中のパスの記述法にご注意下さい。
(詳しくはCGIのパスに関してをご覧ください。)