Windowscgiのつぼ
自宅Widowsサーバー利用において、CGIは頭痛の種。
上手く動作しない、sendmailが動かない、画像のUPが出来ないなどなど多々あると思います。
私のサーバー参照ページはhttp://sakaguch.com/(鷹の巣「サーバー」様)です。
サーバー利用において色々便利な情報が満載なので、自宅サーバーをお考えの方はこちらを参照することをお勧めします。
CGI編集にはnotepadもしくはK-COLLECT様提供のperledtiorを利用すると便利です。

WindowsCGIのつぼ
@CGIが動かない。
一番簡単なサーバーソフト利用をお勧めします。
一番設定が簡単何はAN HTTPD です。
デフォルトでCGIが動きます。
(設置するCGIのperl設定が不要なので簡単)
CGIの勉強にはこれを使っています。↓
http://www.st.rim.or.jp/~nakata/

二番目に簡単なのは札幌ワークス様の BJD↓
http://homepage2.nifty.com/spw/bjd/
このサーバーソフトもCGIがデフォルトで動作OKです。

三番目apache
http://www.apache.jp/dist/httpd/binaries/win32/
これには私もかなり泣かされました。cgiがなかなか動いてくれないし
設置するCGIもイチイチperlの場所を指定しないといけない。
自宅サーバーを考えているなら、これは最後に挑戦して見てください。

apache for windowsで利用するcgiではKENTWEB様のcgiが設定する上でかなり親切に出来ていますのでお勧めです。
http://www.kent-web.com/

基本的に設置するCGIの冒頭に
#!/usr/local/bin/perl
が有ります。これはperlの場所を指定していまして、上記記述はUNIX用に書かれております。
Windowsの場合は別途perlをインストールする必要があるので、perlをインストールした場所に書き換えます。
仮にperlをインストールした場所がCドライブのディレクトリーだとすると、perlの記述は下記のように書き換えないといけません。
例:#!/usr/local/bin/perl
→#!c:/perl/bin/perl
設置するCGIのパスを書き換えるこちによりapacheで動作が可能です。
(※apacheではhttpdの初期設定お行う必要が有ります。詳しくはここ)

次に気をつけないといけないのが、CGIデーターの保護方法です。
仮にAさんが掲示板CGIを開いて何か書き込みをしようとしているときに、Bさんが同じ掲示板CGIを開くと掲示板などのデーターが消えてしまいます。これらを防ぐ方法として排他ロックや共有ロックが使われます。KENTWEB様のCGIには下記のような設定が有ります。
# ロックファイル
# → 0=no 1=symlink関数 2=mkdir関数
$lockkey = 2;
私も詳しく知らないんですが、Windowsサーバーではmkdir関数を使用しないと上手く動きません。
この辺はこれから勉強しないといけないので詳細が判明しだいUP致します。

Windowsサーバーで画像がアップできない・・
大多数のCGIがUNIX用に作成されていまして、UNIXサーバーではデフォルトでCGIを使った画像をアップの際、バイナリ処理が可能であります。
Windowsの場合、CGIを使った画像UPの際バイナリ処理が出来ないため画像UPなどのCGIが上手く動作しない不具合となります。
なのでCGI記述を書き換えないといけなくなります。

例:↓画像ファイルを保存するCGIの記述です。
if (!open(IMAGE,"> $img_dir{$cmd{'log'}}$number$ext2\.$ext")) { &Error('書出エラー',"画像データ $fname\.$ext が記録できませんでした."); }
print IMAGE $in{$name};
close(IMAGE);

上記記述に以下の内容を書き足します。
if (!open(IMAGE,"> $img_dir{$cmd{'log'}}$number$ext2\.$ext")) { &Error('書出エラー',"画像データ $fname\.$ext が記録できませんでした."); }
binmode(IMAGE);
print IMAGE $in{$name};
close(IMAGE);

バイナリモード指定記述を追加することにより、画像UPが可能となります。

Asendmail CGIを使う
契約プロバイダーのメールを使うことで簡単に出来る方法を説明いたします。
※:Windowsは保存データーを暗号化出来ない為、パスワードや保存データーがそのまま見られる可能性が有りますので、十二分に気をつけるもしくはばれても良いメールで設定お願いします。

なおきの部屋[XOOPS版]様提供のsendまね〜るを使います。
sendまね〜るの設定方法は同胞のdocファイルに有りますので呼んでください。
ここでは設定のコツを説明いたします。
基本的に公開するサーバーのメールアカウントを利用しないと上手く動きません。
SMTPサーバのアドレス?(IPを奨励)
[]: →契約プロバイダー送信メールサーバー名

SMTPポート番号?(通常は25)
[25]: →25です。

 送信者のメールアドレスとは、SMTPサーバとの
 (接続)通信時に使用されるメールアドレスです。
 通常、受信者は知ることができません。
 SMTPサーバによっては、メールアドレスにより
 接続を許可しているところがありますので
 その場合は適切なアドレスを設定してください。
 -sf オプション使用時には、このアドレスが
 ヘッダのFrom: 行にセットされます。

送信者のメールアドレス?
[]: →契約プロバイダーメールアドレスを入力

 送信者の名前は、-sf オプション使用時に
 ヘッダのFrom: 行に設定される名前です。
 -sf オプションを使用しない場合は、
 この設定内容は使用されません。

送信者の名前?
[]: →メールアカウントを入力。

POP before SMTPの使用 Yes=1 No=0 ?
[0]: →1(契約プロバイダーによっては必要ない場合も有ります)

POP3サーバのアドレス?(IPを奨励)
[]: →契約プロバイダーの受信メールサーバーアドレス。

POP3サーバのポート番号?(通常は110)
[110]: →110

POP3サーバのユーザー名?
[]: →メールアカウント

POP3サーバのパスワード?
[]: →メールパスワード

以上で設定は完了です。
テスト方法は同胞のdocファイルに有りますのでお読みください。

CGIへの設定方法
#●メール送信プログラム(sendmail以外は要検討)
$sendmail = 'usr/local/perl/lib';
このような記述の部分を

#●メール送信プログラム(sendmail以外は要検討)
$sendmail = 'C:/sendm/sendmane.exe';
上記の場合はCドライブのディレクトリー「sendm」フォルダーにインストールした場合なので
もし別のディレクトリーにインストールしてしまった場合は書き換えてください。
これでフォームメールが使えるようになります。

以上で説明は終わりです。不明な点がございましたら掲示板にでも質問お願いします。

TOPに戻る
PR