■ マイケル先生のなるほどCGI設置講座♪

  • まず手始めに、CGIの意味を一応知っておいてください。
    CGICommon Gateway Interface)の略で、サーバーからWebページを読み出す際に、サーバー側でプログラムを起動し
    その結果をWebページとして返す仕組みのことを言います。HTMLはこちらが作ったデーターをサーバーが表示してくれるだけ
    ですが、CGIは決められたコマンドでプログラムを作成してそれをサーバー側で処理してもらうもので、複雑な命令ができます。
  • この講座はCGIの設置が目的です。プログラムを作成するほど大変ではありませんので硬くならないでいいですヨ。
    これからCGIを始めてみようと思う人向きの講座です。気軽に設置してみましょうね、ここを参考にすれば大抵成功する筈です。
    niftyサーバーへのCGI設置でお困りの方も、一応ここに目を通して専用解説ページへ進んでください。
  • よし、じゃ始めてみようか。おっと、その前に自分の利用しているサーバーは自作CGIの設置を許可しているか確かめましょーね。
    サーバーのQ&Aページに説明してあるところが殆どです、CGIはコチラで用意してあるものが利用頂けますとか、キッパリ自作CGIは
    利用できません
    とか書いてあります。また、許可していても利用制限等があるのでよく調べておきましょう。
  • CGIプログラムを正しく動作させるためには利用サーバーに合わせて設定をしなくてはいけません。
    HTMLファイルは文字通りハイパーテキストファイルなので多少の誤タグや文字だけでもありのまま表示してくれますが
    CGIプログラムはホスト側のコンピューターが命令通りに実行してくれます。それには絶対的な決まりがあります。
    CGIはWindows語と違い、Perl語で動作します。Perl4とかPerl5とか...ま、今回これはこの程度でいいや。
    プログラムをこしらえていくには専門用語と知識が必要ですが、設置や少々の改造をするなら段階を踏んで覚えていけます。
    設置の前に、CGIスクリプト既に出来上がっている実行ファイル)を入手することが先決ですから、まず気にいったところから
    もらってきましょう。うちはKENT-WEBさんのスクリプトが多く分かりやすいのでよく利用させてもらっています。
    CGIを覚えたのも分かりやすいKENT-WEBさんを参考にしたものです。


Step.1 CGIスクリプト(実行ファイル)の設定

  • スクリプト(実行ファイル)をダウンロードしたら、まずこれを解凍します。大抵圧縮されています。解凍先はデスクトップがいいでしょう。
    解凍されたフォルダの中に色々なファイルが入っていますが、ヘルプファイル読んでくださいファイルがあれば一応内容を確かめてください。
  • まず最初に一番必要なCGIIスクリプト(実行ファイルで拡張子名 .cgi がそうです)をテキストエディッタで開きます。
    Winに付属のメモ帳ワードパット、市販の高性能なEmエディッタ秀丸等が便利です。
    ソフトを起動してファイルドラッグすれば内容が表示されます。
    HTMLとは違いホームページビルダーなんかで見ることはできませんよ、お間違えなく。(;^_^A アセアセ・・・
    それと・・・拡張子って分かりますよね、bbs.cgi diary.cgi 赤文字の部分を拡張子といいます。
    bbs diaryの部分はファイル名です。(^◇^) ナ、こたぁ知っとるわい!と怒らないでね。(; -_-).....
  • 開いたcgiファイルの一番上、Perlのパス(赤い部分)をプロバイダで決められたパスに書き直します。
    #!/usr/local/bin/perl ←大抵どちらかです→ #!/usr/bin/perl
    pearlのパスと言うのは、ホストコンピューターが読み取ってCGIプログラムを実行させるコマンドパスの場所です。
    これを設置するサーバーの指定に書き直さないとエラーになってしまいます。
    パスの指定はこれもサーバーのQ&Aに自作CGIを設置される方は、こちらパスを指定してくださいと表記されています。
    (これらはプロバイダで定められたPerlへのパスといい、CGIプログラムはこの場所でしか処理されません)
    ※ 書き換えたら必ず上書き保存してくださいね。よく忘れる場合があります。
  • まずはこれだけで動作するかCGIファイルを全てサーバーへアップしてみます。
    アップ先ですが、これもサーバーで決められた指定があります。
    CGIのアップ先の指定がない場合は、フォルダごとそのままアップしましょう。
    ですが、CGIはここへアップしてくださいと指定しているサーバーはそのディレクトリへフォルダごとアップします。
    大抵、cgi-binフォルダが指定されます。無い場合はcgi-binフォルダを作成します。
    (※ニフティの場合はcgi-binが既に用意されていますが、設定が特殊なので別ページで解説してあります)


Step.2 ファイルアップの注意点とアクセス権の設定

  • CGIファイルのアップ時点で気をつけなくてはならないのが、FTPなどの転送モードです。
    ほとんどのFTPソフトは自動対応になっていると思いますが、CGIファイルはアスキー(テキスト形式)
    その他はバイナリモードで転送します。ビルダーに付属の転送ソフトにもこれらの設定があるようですので
    追加に log ,dat, ini ,old も加えておくと良いでしょう。
    ※ここでは基本的に転送ソフトをSOTAのFFFTPで説明してあります。
  • アップしたあとは、フォルダと各ファイルのパーミッション(アクセス権)の設定をします。
    パーミッションというのは各ファイルへの書き込み、読み込み、等を許可するか、しないかの設定です。
    これも大抵決まっていて、キチンと設定しないと実行エラーになるか、CGIファイルが見つかりませんと
    表示されます。FFFTPソフトのオプション設定で、アップするファイルの属性をあらかじめ決めておくと
    いちいち設定しなくても、アップした時点でそのパーミッション値に変換してくれます。
    手動でする場合は、FFFTPソフトを接続して表示された右のウインドウにあるホスト側のCGIファイルを右クリックし
    属性の変更を選びます。属性値の窓からその数値になるようチェックボックスにチェックを入れたり、外したりします。
    うちでは高速で使いやすいフリーのFTPソフト(SOTA)のFFFTPを使用しています。
    FFFTPの詳しい説明はこちらを参考にしてください→FFFTPの設定やパーミッション設定の説明
  • 各ファイルのパーミッション値(アクセス権)はCGIスクリプトファイルの中に記入されているのが殆どです。
    代表的なものは以下のファイルやフォルダです。
  • ※CGIの利用できるレンタルサーバー等ではパーミッション値を指定している場合があるので動作しない場合は値を変更します。

    / ファイル/フォルダ パーミッション値 備 考
    cgi-bibフォルダ 777 新たにディレクトリを作成した場合
    cgiファイル 755 実行ファイル
    datファイル 666 1dat count past-no 等の記録用ファイル
    logファイル 666 ログ記録用ファイル
    iniファイル 644 設定ファイル、あればアップ
    plファイル 644 jcode cgi-lib gifcat mimew 等の各種ライブラリー
    その他必要なフォルダ(指定がある場合)
    lockフォルダ 777 カラッポ ファイルは自動作成あるいは削除される
    pastフォルダ 777 中には大抵1.datファイルが入っている、中のdatは666にすること。
  • 以上でCGI関係の設定が終了です。
    ブラウザを起動させ、CGIスクリプトまでのパス(URL)を打ち込んでみましょう。(****はファイルの名前です)
    例として、cgi-binフォルダが必要でCGIファイルを収めているフォルダ名がBBSの場合。
    http://あなたのアドレス/cgi-bin/bbs/****.cgi という具合です。
    ブラウザに実行画面が表示されたら大成功!です。♪
    あとはCGIスクリプト内の設定項目(パスワードや名前、その他戻りページ、デザイン設定等)を書き換え
    上書き保存したあと再度アップします。(よく変化しないと言う人がいますが大抵上書きアップを忘れている場合が多いです
    PC側(ローカル側)のファイルを書き換えても、実行ファイルはホスト側にあることを忘れてはいけません。
    などと、エラそーに言ってますが、自分もよくこれをやってましたぁ。σ(^◇^;)
    他には、全く違う場所にアップして、アレ?変わらないぞ?と不思議がったりしたりシテたり。(爆笑)


Trouble?困ったことに・・・表示されないエラーになった

  • ところが・・・CGIファイルをUPしてブラウザーのURLにアドレスを入れてみたが英語の文字が表示されたとき。
    HTTP403 Not Forbidden とか、HTTP500 Internal Server Errorが表示されると以下のチェックをしてみましょう。
    HTMLファイルはテキスト形式なので、間違っていてもそのまま表示されますが、CGIファイルはpearl語のプログラムファイルです。
    ホストコンピューターがこのプログラムを読み込んでHTML形式で表示してくれます。プログラムの記述が間違っているとか、関連ファイル
    が足りない場合は以下のようなエラー表示で教えてくれるありがたい表示なのです。(爆笑)

    HTTP403 Not Forbiddenアクセス権限がありません
    という意味でパーミッション設定を再度確認してみましょう。
    CGIプログラムに関係しているファイルの一つでもパーミッション設定ができていない場合も表示されます。

    HTTP500 Internal Server ErroCGIファイルの内部記述の間違いエラーで実行できない
    という意味でこれは厄介です。プログラムファイルに余計なスペースとか、使えない記号などを入力した場合、必要な記号が足りない場合
    実行に必要なファイルがない場合のプログラムエラーです。手直しの方法として一番簡単なのはホスト側にあるCGIファイルを一度削除して
    保存してある元のファイルと置き換えて再度アップしてみると良いでしょう。勿論バーミッションやpearlへのパスの変更を忘れてはいけません。
    まあ、設定個所意外をいじくったりしない限り出ませんが、HTMLタグに慣れている人はCGIも同じだろうと記述してしまう場合があり、これが
    間違いの元です。(')クォーテーションで囲まれた中に()ダブルクォーテーションで囲んだ文字を入れてはいけません。()ダブルクォーテーション
    の場合は(')クォーテーションで囲むか入れないほうがよろしい。(;)←記号抜けの場合もあります。 その他各変数プログラムのおしまいに必要な
    \";)←記述が抜けているとかイロイロな要因があります。

    CGIは全ての文字、数 スペースがプログラムに関係しているのでわずかなミスでも動作しなくなります。
    とくに、英文だと、コマンド語と同じ文字を使用してしまうのでエラーとなります。
    マイケルも初期の頃は悩み悩んだものですが何度もトライして覚えていき、今では元のスクリプトチェックまでできるようになりました^^


Study ディレクトリを理解する

  • ディレクトリと言うのはファイルやフォルダが置かれてある絶対位置です。PC内のファイルやフォルダをどこかへ移動したとします
    関連付けされたプログラムを開いた時、絶対位置にあったファイルが見つからないので、ファイルが見つかりませんと表示されますね
    元の場所に戻してやると、ちゃんと表示されるでしょう?これがのディレクトリの絶対位置です。よくホームページデーターをバックアップ
    するために、フォルダやファイルをコピペで移動させる人がいます。しかし移動は出来ても、内容は書き換わっていません。PCはお利巧さん
    ですが、移動したので内部情報を書き換えなくっちゃ、とはやってくれません。試しにコピペで移動したファイルをビルダーなどで開いて見る
    とわかりますが、大抵画像のある部分に×マークが入っている筈です。コピペでの移動は画像のある絶対ディレクトリ情報は変更されません
    正しい移動の方法は、一度新しいフォルダを作って、元の場所のファイルを開き、新しいフォルダに保存し直す必要があります。ファイルが
    沢山あるとこれではとても大変です。そこで最も簡単な移動方法は、ホスト側にあるデーターを新たに作ったローカル側のフォルダへDLし直す
    ことで解決できます。データーに記述されているディレクトリの位置はコピペではダメだと覚えておいてください。

    自作CGIを設置する場合、ホスト側にcgi-binディレクトリを作成して、この中にCGIファイルを入れてくださいと説明されています。
    これはホストコンピューターがCGIプログラムを実行するために読み取る絶対位置と決められているからです。
    このディレクトリを作成するのは別に難しくもなんともありません、単にcgi-binフォルダを作成すればいいだけのことです。
    ホスト側に新規フォルダを作成するにして、名前をcgi-biとするだけでOKです。ニフティなどは既に用意されています。
    うちのホストみたい、特にCGIディレクトリを指定していないホストではスクリプトを何処に置いても動作します。
    あとはURLを指定してやれば実行してくれます。つまり、簡単なんです^^

    また、サーバーの負荷を減らすためにCGI専用のサーバーを別の会社に委託しているサーバーもあります。
    この場合も設定は難しくありませんが、画像をCGIサーバーに置けない場合はスクリプト内の全てのURLの記述は
    フルパス=(http://〜等)で行う必要があります。
  • ディレクトリとURLでは記述が違う
    CGIスクリプトの中に、画像のディレクトリを指定とか、画像ファイルまでのURLを指定してくださいと書かれていますが
    ディレクトリとURLの記述は全く違います。例としてBBSをあげると以下のようになります。
    画像も全てcgi-binフォルダにおけるホストの場合。
    ディレクトリの記述: ./bbs/画像フォルダ名/
    URLの記述: http://あなたのアドレス/cgi-bin/bbs/画像フォルダ名/
    どちらも最後は/(スラッシュ)で終わります。

    画像やHTMLファイルはcgi-binフォルダにおけないホストの場合。
    ディレクトリの記述: /画像を収めるフォルダ名/画像フォルダ名/
    URLの記述: http://あなたのアドレス/画像を収めるフォルダ名/画像フォルダ名/
    これもどちらも最後は/(スラッシュ)で終わります。
  • /(スラッシュ)の前にある.(カンマ)の意味。
    これは各階層を示しています。./またはなしの場合は同じディレクトリにあることを意味します。
    ../カンマが2つは一つ上の階層だと言う意味です。つまり元になるファイルがある場所から一つ外にあるフォルダのことです。
    .../3つは無く、../../と記述することで、3階層外にあることを意味します。
    HTMLファイルを置くディレクトリに画像用フォルダを作らずそのまま置く場合、HTMLファイルの画像URL記述は
    <img src="画像名.拡張子">で表示されます。画像を納める専用フォルダを作ってそこから読み込む場合は
    <img src="画像を納めるフォルダ名/画像名.拡張子">で表示されますが、これはWEB上でしか通用しません。
    これをローカル側のソフトで開いてみても、画像の位置には×マークがあるだけです。
    しかし../を入れることで、ローカル側で見た場合はその画像ディレクトリが指定され、
    file:///C:/マイドキュメント/ホームページ/私用/***.gifと表示される訳です。(カタカナ部分は便せんです)
    WEBでの読み込みを早くするためには、フルパス指定するにこしたことはありません。ソースを見られるのが嫌な人は
    この方法を使いますが、フォルダの中にデフォルトHTML(真っ白ケな仮のファイル)を置いておけばサーバーの読み込み優先機能で何も表示されません。
    ディレクトリ内を覗かれる心配はないです。よくURLを1階層戻ったらディレクトリの内容が丸見えサイトがあります^^
    故意でやってる処もありますが、大抵このことを知らない素人さんでしょう。
    マイナーなプロバイダーでは各ディレクトリの内容を覗くのは禁止設定してあるので心配ないと思います。

    以上で失敗のないCGI設置の講義を終わります。ニフティの方は別ページに説明してありますので、そちらを参考にしてください。
    niftyへの自作CGI設置講義へ行く


    back     CGIスクリプト配布のケントWEBさん