新規記事投稿 フォロー記事投稿 記事のキャンセル
From: momo <ttminfo@alpha-web.or.jp>
Subject: Re: NTでCGIをTESTする方法
Date: 1997/03/26 14:48:20
Reference: mesh.program/00245

こんさん、Yasu.Fさんみなさんこんにちは。
momoです。
コメントほんとうにありがとうございます。

なかなかうまくいかず疲労困ぱい、熱が出てきて
頭がボーっとしています。もう限界か・・・。

3月25日に、こんさんは書きました。

>ファイルを開くと言うメッセージが出るところから読み
>取りが入っている気がします。

Yasu.Fさんのコメントもありましたが、
ひとまず、htmが入っているところを読み取り専用にし、
スクリプトが入っているところを実行専用にしてみたところ

「http1.0 500 サーバエラー(指定されたモジュールが見つかりません)」
というメッセージが返りました。

このメッセージはそのままにして次に

.pl=perkis.dllとして今までやっていたものを
(Can't open script)、

.plx=perl.exeにして
<FORM ACTION=scripts/regist.plx">として試してみたところ、

「CGIエラー
指定されたCGIアプリケーションは、
HTTPヘッダーを一部しか返していません。返されたヘッダーは
can't modify subroutine entry in scalar assignment at 
C:\IIS\scrits\regist.plx line 10, near "};"
String found where operator expected at C:\IIS\scripts\regist.plx
line 27, near "&jcode' convert(*name,'"
(Missing operator before ' convert(*name'?)
syntax error at C:\IIS\scripts\regist.plx line 27, near 
"&jcode' convert(*name,'"
Bad name after euc:: at C:\IIS\scripts\regist.plx line 27.」

というやたら沢山のエラーが返されました。
(もはやこの記事のこの行まで読んでくださってる方はいないかも・・・)
これに似たエラーは、「perl初心者の部屋」のperl for win32 FAQ
にも出ているのですが、そこではこのメッセージの解決方法として

ヘッダー情報 に
print "HTTP/1.0 200 OK\n";
print "Content-type:text/html\n\n\n";

を追加しレジストリに .pl=perl.exe %s を追加する、
とあるのです。でも私の場合、上記解決方法を行ったら
前出のエラーが出るという、問題と解決が逆になったような
状況です・・・。

使用している一連のファイルは次のものです。
(1) C:\IIS\docs\Input.htm  フォーム入力のページ
(2) C:\IIS\scripts\regist.pl(x)  フォームのデータをファイルに書く
(3) C:\IIS\scripts\guest.txt  regist.plが書き込む場所 
(4) C:\IIS\scripts\jcode.pl

です。
regist.pl(x)は、今次のようになっています。
#!/usr/local/bin/perl;
print "HTTP/1.0  200 OK\n";
print "Content-type:text/html\n\n\n";

require 'C:\\IIS\\scripts\\jcode.pl';
$data='C:\\IIS\\script\\guest.txt';

&buffer = $ENV{QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs)
{
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9])/pack("c", hex($1))/eg;
    $FORM{$name} = $value;
}
$name = $FORM{'name'};
$email = $FORM{'email'};

if ($name eq '' || $email eq ''){
   print "<H1>Empty data</H1>";
   exit(0);
}
&jcode' convert(*name,'euc');
&jcode' convert(*email,'euc');

if (!open(OUT,">>$data")) {
   print "<H1>Register Error</H1>";
   exit(0);
}
flock(OUT,2);
print OUT "$name, $email\n";
close(OUT);
print "<H1>Thank you for your regist</H1>\n";
exit(0);

NT用に一部変更を加えていますが、
元のスクリプトは、UNIXではうまく動かすことができました。

後で name と email を %name% と %email%
にして試してみようと思います。
(スクリプトの中身まで、IISはまだ見ていない気もするのですが
今のところ他にやるべきことが見つからないので・・・)

ところで
ファイルのアクセス権限はUsersに対して以下のようにしています。
Administrators に対してはフルコントロールです。

regist.pl(x) 実行
guest.txt    読み取り・書き込み
jcode.pl     実行

ディレクトリのアクセス権限は、
                      NTFS              IIS
C:\IIS\docs     読み取り    読み取り
C:\IIS\scripts   実行       実行

です。

ここまで長い内容に付き合ってくださる方が
いらっしゃることを祈る気持ちです。

Microsoftのサポートページに
IIS専用のFAQができたので
先ほど一通り見たところです。
これからじっくり読み直してみます・・・。