• ベストアンサー

この場合、CGIプログラムの記述を教えて!

http://www.d3.dion.ne.jp/~tiyoko01/form/form.html このページに掲載されている意見を入力する部分だけをネットにCGIを使ってアップしたいです。 CGIは初めてです。CGIのプログラムをネットサーバーに記述するんでしょうか? どんなプログラムを記述すればいいのでしょうか? 意見を受信して、それを私に返すプログラムですかね? 精通されている方がおられましたら、記述内容教えて下さいませ。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kichi8000
  • ベストアンサー率41% (660/1584)
回答No.1

サーバー環境によってCGI設置の方法が違うし、 CGIについてレクチャーすることになるようなので、 また、CGIのDEBUGの必要があると考えると、 ネットサーバーがダウンする危険性があるので、 ここで回答するのはたぶん無理。 最悪の場合、間違えて無限ループなんか作ってしまうと、停止できなくなって迷惑をかける。 手始めには、画面に数文字を表示させるのも難しいんじゃないだろうか。 CGIはプログラムだと言うことを認識してください。失敗するとサーバーに迷惑がかかります。 あるサーバーは、CGIの長時間動作(無限ループ等)で強制停止するし、多重動作はできないので、初心者にも安心して使えるんだけどねぇ。 ここで紹介するCGIは、すべてPerl(パールと読む)で書いています。 CGIの設置。 ネットーサーバーでperlが使えることを規約で確認。 CGIネットサーバーを使うための使用登録、FTPサーバーログインネームとパスワードの取得。 アドレスネームの決定。FTPアドレスの確認。 FTPソフト(必要ない場合がある)をPCにインストールと、FTPアドレス、FTPサーバーログインネームとパスワードの登録。 CGIファイルのヘッダ=perlのパス名と改行1行を確認。 テキストファイルとHTMLファイルの文字コード形式の決定。 HTMLファイルへのヘッダの1行目に文字コード形式の記述が必須。 テキストファイルのヘッダの3行目以降に文字コード形式の記述が必須。 テキストエディタから保存するときに、先に決めておいた文字コード形式で保存することが必須。 ファイル名は英文字小文字でないと動作しない。(ピリオドが複数あると削除不能になる可能性がある-おかしな記号は使わない) サーバーで決められた改行コードに自動変換されるようにFTPソフトを設定。 サーバーへのファイル保存のためのフォルダ構造の決定。 アップロードしたフォルダと各種ファイルのパーミッションの決定。 簡易に作成したり上級者である場合以外では、CGIのDEBUG環境をPCに設置して、バーチャル環境で作成&テストしないと、おそらく失敗してサーバー全体に迷惑をかけることになる。 末尾のセミコロン「;」(文末記号)を忘れないこと ここまできて、やっとCGIを作成する環境が整ったことになります。 以下は、基本を飛び越えて中級になっています。 htmlをCGIで書き直しただけです。 かなり盛り込んでありますが大丈夫でしょうか。 ユーザーhtml部分に下のhtmlをprint文で書き直して配置してください。 受け取りスクリプトはほかに必要です。 「初めて書いたCGI」を表示するスクリプト。 ===ここから テキストがUTF8でHTMLがCP932(拡張Shift-JISのこと)で保存の場合のCGI記述 #!/usr/local/bin/perl #2行目は改行のみ use utf8;#これ以下の記述はUTF8である宣言:基本これじゃないと文字化けする # use ~:モジュールを組み込む use Encode;#文字コード変換を組み込み use CGI;#htmlのフォームが読み込める $q= new CGI;#htmlオブジェクトを $q->~ で呼び出し #以下cp932<=>utf8 の自動文字コード変換のための記述 use open IN => ":encoding(cp932)";#ファイル操作の自動文字コード変換の記述 use open OUT => ":encoding(cp932)"; use open IO => ":encoding(cp932)"; binmode STDIN, ":encoding(cp932)";#print文の自動文字コード変換の記述 binmode STDOUT, ":encoding(cp932)"; #---HTMLヘッダ print "Content-type: text/html\n\n"; print "<!DOCTYPE html>\n"; print "<html>\n"; print "<head>\n"; print "<meta http-equiv='Content-Type' content='text/html; charset=shift_jis'>\n"; print "<meta http-equiv='Content-Language' content='ja'>\n"; print "<title>初めてのCGI</title>\n";#htmlのタイトル print "</head>\n"; print "<body>\n"; #ここから ユーザーhtmlの書き出しスクリプトを記述 $txt = "初めて書いたCGI"; #$txt = $q->param("status");#記述例 htmlフォーム(submit)のname=statusの読み出し :htmlからこのCGIを呼び出したときにのみ使用 print "<p align=center>$txt</p>\n";#変数の文字列内記述 #print "<div class=\"cl\">";#記述例 ダブルコーテーション #ユーザーhtml ここまで print "</body>\n"; print "</html>\n"; ===ここまで 下のhtmlはcssのclassや画像ファイルを呼び出していますのでエラーになります。 そのままでは表示が崩れるでしょう。 ===フォームのhtmlは上のprint文に組み込みます。 <div class="cl"> <div> <p> <img src="item1.gif" width="221" height="31" alt="「基本的なフォーム」のナビゲーションバー" class="space_top"> </p> <form method="post" action="#"> <p> お名前:<input type="text" name="name">(テキスト入力) </p> <input type="password" name="pass"> (パスワード入力) <p> 性別: <input type="radio" name="seibetu" value="man" checked> 男  <input type="radio" name="seibetu" value="woman"> 女(ラジオボタン) </p> <p> 趣味: <input type="checkbox" name="pc" value="pasokon" checked> パソコン <input type="checkbox" name="golf" value="golf"> ゴルフ <input type="checkbox" name="garden" value="gardening "> ガーデニング(チェックボックス ) </p> <p>  好きな色: <select name="color"> <option>赤</option> <option selected>青</option> <option>緑</option> <option>黄色</option> </select>(選択メニュー) </p> <p> <textarea name="message" rows="4" cols="40">自由にご意見をお書きください</textarea> (複数行のテキスト入力) </p> <p> <input type="submit" value="送信">  <input type="reset" value="取り消し">(送信とリセットボタン) </p> <p class="font4"> サンプルのため送信はできません </p> </form> </div> </div>

kfjbgut
質問者

補足

してサーバー全体に迷惑をかけることになる。 具体的にはどのような迷惑ですか? 私は自分ネットショップのURLを取得した企業さんのサーバーを使っています。

その他の回答 (1)

  • kichi8000
  • ベストアンサー率41% (660/1584)
回答No.2

サーバーもコンピューターです。 契約時に禁止事項にかかれているはずです。 例えば、SUB Aというサブルーチンの中から対策なしに自身のSUB Aを呼び出したとしましょう。 そうすると無限に呼び出すことになり、あっという間にサーバーのメモリー(リソース)を使いきり、サーバーが停止し全ユーザーが使用できなくなります。 そうなれば、アカウント停止、強制退会になりかねません。 DEBUGERが必要なのはこのためです。

関連するQ&A

専門家に質問してみよう