U-netSURF インターネットサービスプロバイダー 法人向けサービス

U-netSURF(ユーネットサーフ)

名前deWebサービス

 



CGIについて

CGIプログラム記述言語について

Shell(sh,csh)とPerl(version 4とversion 5)です。コマンドのパスは次の通りです。

sh → /usr/bin/sh
csh → /usr/bin/csh
Perl version 4.036 → /usr/local/bin/perl
Perl5 version 5.003 → /usr/local/bin/perl5
Perl56 version 5.6.0 → /usr/local/bin/perl56

CGIプログラムの1行目に#!の後に上記のパスを半角で記述します。

perlと記述しますと、Perl version 4になります。U-netSURFのPerl version 4ではflockが使用できないので、Perl5またはPerl56を使用してください。

CGIプログラムの拡張子は「.cgi」としてください。また、CGIプログラムの属性(パーミッション)に実行可能モードを追加してください。

注)jperl(日本語Perl)はインストールされておりません。

このページの先頭へ戻る

jcode.pl、cgi-lib.plについて

jcode.pl、cgi-bin.plはインストール済みですので、アップロードされる必要はありませんが、最新バージョンなどをホームディレクトリ以下にアップロードされても構いません。

Perl、Perl5 → jcode.pl version 2.3、cgi-lib.pl version 1.8l
Perl56 → jcode.pl version 2.13、cgi-lib.pl version 2.18

ホームディレクトリ以下にアップロードされた時は、require文でそのパスを指定するか、use lib文でそのパスを追加してください(@INCの先頭に追加されます)
なお、属性(パーミッション)に実行可能モードを追加する必要はありません。

例: require './lib/cgi-lib.pl'; # './lib'は、 現在のディレクトリ下にあるlibというディレクトリ。または  use lib './lib';  require 'cgi-lib.pl';

CGIpmについて

CGI.pmは、Perl5ではインストールされていませんでしたので、アップロードして戴かなければなりませんでした。
Perl56では、インストールされていますので、アップロードされる必要はありません。

Perl → pm(パールモジュール)は、Perl version 4では利用できません。
Perl5 → CGI.pmはインストールされていません。
Perl56 → CGI.pm version 2.56

ホームディレクトリ以下にアップロードされた時は、use lib文でそのパスを追加してください(@INCの先頭に追加されます)。なお、属性(パーミッション)に実行可能モードを追加する必要はありません。

例:use lib './lib';
use CGI;

このページの先頭へ戻る

sendmail、nkfのパスについて

sendmail、nkfのパスは次の通りです。

sendmail → /usr/lib/sendmail
nkf → /usr/local/bin/nkf

CGIプログラムの設置場所、および属性(パーミッション)について

CGIプログラムの設置場所は、任意です。 ただし、ホームディレクトリの直下には、cgi-binというディレクトリを作成 しないでください。
cgi-bin という名前でディレクトリを作成して、そのディレクトリ下に CGIプログラムを格納されても正しく起動されません。

cgi-binというディレクトリの意味ですが、アクセスカウンタの設置例で説明しますと   <IMG SRC="/cgi-bin/Count.cgi?dd=A&df=Wnamae.dat">で呼び出すcgi-binディレクトリは、お客様のホームディレクトリ下にあるcgi-binディレクトリではなく、サーバ本来の(ルートの)cgi-bin ディレクトリにあるCount.cgiプログラムを呼んでいるということです。

ホームディレクトリ直下ではなく、あるディレクトリを作られてその下に cgi-binというディレクトリを作られるのは構いません。 例えば、./board/cgi-bin/board.cgiは正しく起動されます。 掲示板のCGIプログラムを使う場合、お客様のディレクトリ名がWnamae、 CGIプログラム名が board.cgi、データファイル名が board.dat でしたら以下のような階層になると思います。

Wnamae ---(ホームディレクトリ)
|- index.html
|- board(掲示板用ディレクトリ)
  |- board.cgi
  |- data(データファイルのディレクトリ)
     |- board.dat

サーバ側では大文字、小文字を区別して別の文字とみなしますので、ディレクトリ名、ファイル名を指定する際は、注意してください。

CGIプログラムの属性(パーミッション)は、FTPソフトで実行可能(x)モードを追加してください。(664から775にしてください)

7:「オーナ」のパーミッションです。
7:「グループ」のパーミッションです。
5:「その他」のパーミッションです。

4bi : r 読み取り可
2bit: w 書き込み可
1bit: x 実行可

通常は、775にしますが、U-netSURFでは、CGIプログラムは「その他」のアクセス権で実行されますので、次のように設定するのがベストです。

  • ftpアカウントを複数お持ちのときは、665
  • ftpアカウントが一つしかないときは、605。

「オーナ」のパーミッションは、アップロードのために、6または7でなければいけません。 「グループ」のパーミッションは、ftpアカウントが複数あるときのアップロードのために、6または7でなければいけません。

このページの先頭へ戻る

CGIプログラムの指定(呼び出し)の方法について

上記の掲示板の例で、boardディレクトリ下にあるboard.cgiを呼び出すとき

  • URL からCGIプログラムを直接指定する場合
    (ドメイン名がnamaedeweb.co.jpのとき)
    http://www.namaedeweb.co.jp/board/board.cgi
  • フォームの ACTION から指定する場合
    <FORM action="./board/board.cgi" method="POST">
  • HREF から指定する場合
    <A href="./board/board.cgi">掲示板</A>

フォームメールCGIプログラムについて

フォームから入力したデータを、漢字コード変換等を行ってからメールする場合の サンプルは以下のとおりです。

  • 「send.html」は、入力用の画面を作成しています。
  • 「send.cgi」は、 send.htmlで作成した画面上で「送信」をクリックされた時に 呼び出され、入力画面から受け取ったメッセージをsendmailコマンドでメールしています。

注)CGIプログラムは、アップロード時のコードがShift_JISの場合とEUCの場合の2パターンあります。

send.htmlファイル(入力用フォームの雛形)

<HTML>
<HEAD>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=Shift_JIS">
<TITLE>電子メールの送信</TITLE>
</HEAD>
<BODY BGCOLOR="white" LINK=blue VLINK=blue>
<CENTER>
<FONT SIZE=4 COLOR=GREEN><B> 電子メールの送信 </B></FONT>
<FONT SIZE=3 COLOR=black>
<FORM ACTION="./send.cgi" METHOD="POST">
<B>メールアドレス</B>
<BR>
<INPUT TYPE="text" NAME="email" SIZE="30" MAXLENGTH="100">
<P> <B>お名前</B>
<BR>
<INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="50">
<P> <B>メッセージ</B>
<BR>
<TEXTAREA NAME="message" ROWS="3" COLS="50"></TEXTAREA> <P>
<INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="取消"> </FORM>
<B>全項目の入力を確認して“送信”ボタンをクリック下さい。</B>
<BR>
</CENTER>
</BODY>
</HTML>

send.cgiファイル(CGIプログラムの雛形,Shift_JISでアップロード)

パソコンからの入力データのコードは、Shift_JISですから、jcode.plのconvertでコード変換 する必要はありません。 下記の$mailto = 'ユーザID@dp.u-netsurf.ne.jp'; は御自身のメールアドレスに変更ください。 ヒアドキュメント内のFrom:のメールアドレスも変更してください。

ヒアドキュメント内の文字列またはダブルクォート内の文字列に、@があるときは、配列名でない ことを示すために、\@とエスケープしてください。

#!/usr/local/bin/perl56
print "Content-type: text/html; charset=EUC-JP\n\n";
require 'cgi-lib.pl';
require 'jcode.pl';
$nkf = "/usr/local/bin/nkf -j"; # nkfで JISコードへ変換。
#データの取出し
&ReadParse(*data);
$email = $data{'email'};
$name = $data{'name'};
$message = $data{'message'}; &jcode'convert(*name,'euc');??? #
EUCコードに変換。
&jcode'convert(*message,'euc'); # EUCコードに変換。
#メールの送信
$sendmail = "/usr/lib/sendmail";
$mailto = 'ユーザID@dp.u-netsurf.ne.jp';#ダブルクォートならば、"..\@dp.."となります。
open(MAIL,"| $nkf | $sendmail -t"); # -tは、To:で指定したところに送信。
print MAIL <<"_EOF_";
From: ユーザID\@dp.u-netsurf.ne.jp
To:$mailto
Subject:メール送信
メールアドレス: $email
お名前: $name
メッセージ: $message
_EOF_
close (MAIL);
print <<"REPLY";
<HTML>
<HEAD>
<TITLE>メール送信</TITLE>
</HEAD>
<BODY>
ありがとう!
<BR><BR>
メールアドレス: $email<BR>
お名前: $name<BR>
メッセージ: $message<BR>
</BODY>
</HTML>
REPLY exit;

注)コードのコードのコピー&ペーストで左側に空白文字が入ったとき、削除してください。 1行目 #!/usr/local/bin/perl5 は「#!」で書き始めます。 ヒアドキュメントの終端文字列 _EOF_ の前後に空白文字を置かないようにしてください。

このページの先頭へ戻る

send.cgiについての説明

cgi-lib.plパッケージは、CGIプログラムをPerlで記述した場合に使用します。 GETやPOST形式に対応、入力データを連想配列に入れ込みます。

  1. CGIプログラムの最初の位置でこのパッケージを呼び出します。
      require 'cgi-lib.pl';
  2. データを読み込み、data(名前は任意)配列にいれます。
    require 'cgi-lib.pl';
  3. データの取出しは、$data{'入力データの変数名'} 形式です。
    $NAME = $data{'name'};

データの漢字コード変換について

jcode.plパッケージは、CGIプログラムをPerlで記述した場合に使用します。認識できる漢字コード系は、JIS コード(jis)、MS 漢字コード(sjis)、および日本語EUC(euc)の3種類です。

  1. CGIプログラムの最初の位置でこのパッケージを呼び出します。
    require 'jcode.pl';
  2. データを変換します
    require 'cgi-lib.pl';
    require 'jcode.pl';
    &ReadParse(*data);
    $NAME = $data{'name'};? (cgi-lib.plでデータを取出し)

EUCに変換 &jcode'convert(*NAME、'euc');
JISに変換 &jcode'convert(*NAME、'jis');
SJISに変換 &jcode'convert(*NAME、'sjis');

受け取ったメッセージをメールする方法について

ファイルの漢字コードをJISコードに変換し、sendmailに渡します。nkfが認識できる入出力の漢字コード系は、JIS コード(jis)、MS 漢字コード(sjis)、および日本語EUC (euc) の3種類です。

EUC に変換 /usr/local/bin/nkf -e 入力ファイル > 出力ファイル?
JIS に変換 /usr/local/bin/nkf -j 入力ファイル > 出力ファイル
SJIS に変換 /usr/local/bin/nkf -s 入力ファイル > 出力ファイル

注)入力ファイル内に半角カナコードを使用しないでください。

sendmailへのオプション -tで To:で指定したところに送信します。
From:がないときは(Fromの省略時値は)、www@Webサーバ名になります。

ファイルをWebサーバにアップロードして、設定は完了

例:ホームページのディレクトリ構造と各ファイルが以下の場合

Wnamae (ホームディレクトリ)
    |--send.html
    |--send.cgi [パーミッション 775]

FTPソフトを使ってパソコンからサーバへファイルをアップロードします。

  1. send.htmlファイルをホームディレクトリにアップロードします
  2. send.cgiファイルをホームディレクトリにアップロードします
  3. send.cgiファイルのアクセス権(パーミッション)を775に変更します
  4. ブラウザからsend.htmlを呼び出してみましょう
    http://www.namaedeweb.co.jp/send.html
  5. 画面にメールアドレス、お名前とメッセージを入力します。そして”送信”ボタンを押します。
  6. メーラソフトを起動してメールが受信できるかどうかを確認します。
このページの先頭へ戻る
いたずら防止(タグ禁止)について

メッセージのところに <FONT SIZE="6">FONTサイズ6</FONT> と入れて 送信してみてください。文字が大きく表示されます。
太字、 罫線、<META> (強制的に別ページへ飛ばす)などのタグ、それと、タグ閉じ忘れも試してみてください。
このように、タグ付きの入力データをそのままhtmlに組み込むと、ブラウザで処理されてしまい、入力データの再表示という単純な目的が果たせません。

メッセージ欄において、すべてのタグを禁止するには、以下の文をデータ取り出し文の次に入れてください。

$message = $data{'message'};
$message =~ s/</&lt;/g;      #<<< 追加。タグ禁止。

"<"の文字を"&lt;"に置き換えたのをブラウザが受け取りますが、ブラウザは"&lt;"を"<"に変換しますので、入力されたデータが そのまま表示されることになります。

このテキストに記述しているサンプルは、CGIを理解していただくためのものです。 公開されるCGIには、必ず、いたずら防止などのチェック機能を組み込んでください。 タグの禁止、許可するタグの処理などについての詳細は、CGI書籍等を参照してください。

このページの先頭へ戻る