新規記事投稿
フォロー記事投稿
記事のキャンセル
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ができたので
先ほど一通り見たところです。
これからじっくり読み直してみます・・・。