NT+IIS4.0+perlでファイルの操作をするには?
[上に]
[前に]
[次に]
初心者
[E-Mail]
1999/11/04(木) 11:24:26
NT+IIS4.0でPERLを動かそうとしているのですが、ファイルの操作がうまくいきません。
"print"など表示だけのものは問題なく動くのですが、データの受け渡しなどに失敗するようです。
書き込みのスクリプトを実行すると、何もエラーを返さず書き込んだように見えてデータファイルには入っていません。
アクセス権なども確認したつもりです。
なぜなんでしょう??
ご存知の方教えてください。
無責任官庁
1999/11/04(木) 14:04:53
> 書き込んだように見えてデータファイルには入っていません
これは・・・?
ファイルそのものは、できたのですか?それで中身がカラとか。
それとも、ファイルさえもできていない?
どのようなプログラムを書いたのか、教えていただけると良いかもです。
open文をどう書いたのかが、ポイントじゃないかな。
openとprint、どう書いたか教えてくれます?
初心者
[E-Mail]
1999/11/04(木) 15:43:09
無責任官庁さん、ありがとうございます。
ファイルさえもできません・・・。
ファイルを作ってあげてはどうか?と思って、先に作ってあげても(もちろんフルアクセスで)真っ白なんです。
open以下はこんなです。
-------ここから--------------
open(IN,">data.txt");
print IN "<DT><A HREF=\"mailto:$mail\">$name</A>";
print IN "<<A HREF=\"$url\">$url</A>>\n";
print IN "<DD>$comment\n";
close(IN);
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n<TITLE>書き込みました</TITLE>\n</HEAD>\n";
print "<BODY>\n<H1>書き込みました</H1>\n";
print "</BODY>\n</HTML>";
--------ここまで-------------
ちなみに「書き込みました」は表示されるんです。
無責任官庁
1999/11/04(木) 16:43:04
えーと・・・プログラム見た限りでは、変な所ないけど・・・
ファイルが無いというのは、どこを見て無いって言いましたか?
または、このopenによってファイルが出来る場所は、
どこだと思ってますか?
IISでCGIやる場合のポイント・・・
http://www.tohoho-web.com/wwwcgi4.htm#WinNT
ここの(5)にあるように、カレントディレクトリが違ってると思う。
恐らく、Inetpub\wwwroot の下にでもファイル出来てるんじゃないかなぁ(^-^;)
“data.txt”を、検索してみては?
(スタート→検索→ファイルやフォルダで、探す場所をマイコンピュータに)
初心者
[E-Mail]
1999/11/08(月) 17:29:07
残念ながらマイコンピュータで検索しても「data.txt」はありませんでした。ちなみにhttp指定してもダメでした。
http://www.tohoho-web.com/wwwcgi4.htm#WinNT
(5)のchdirもやってみましたが、ダメでした。
困りました。何か根本が間違っているのでしょうか?
訳分からなくなってきました。
とほほほほ・・・
ふじ
1999/11/08(月) 17:52:00
とりあえずスクリプトの先頭で
print "Content-Type: text/html\n\n";
としておいて、
>open(IN,">data.txt");
これを
open(IN,">data.txt") or print "can't open data.txt $!";
としてみて実行しましょう。
ファイルのオープンに失敗しているならメッセージが出ます。
あと、適当なところで
use Cwd;
print "current dir = ", cwd();
としてみて下さい。
これでカレントディレクトリが分かるはずです。
ぎん
1999/11/08(月) 18:03:39
NTサーバー上のCGIは、私も素人なんですが。。。
ちなみに、うちの環境では、同じ文で書き込めました。
試しに、
> open(IN,">data.txt");
を、フルパスで指定してみるとか、
open(IN,">data.txt");
print IN "abc";
close(IN);
の様にごく単純にしてみるとか。。。
ごめん、きっと参考になってないね。
ふじ
1999/11/08(月) 18:08:38
カレントディレクトリが(思っているのと)違っちゃってる気が・・・
>(5)のchdirもやってみましたが、ダメでした。
これも、
chdir("hogehoge") or print "chdir false. $!";
として、メッセージが出ないかどうか見てみましょう。
#open 等の戻り値はこまめにチェックする習慣を付けた方が
#良いです。デバッグが楽になるから。
初心者
1999/11/08(月) 18:58:50
ふじさん。ありがとうございます。
ふじさんの言うとおりに書き換えてみると、下記メッセージが
----------ここから-----------------
chdir false. No such file or directory can't open data.txt No such file or directory Content-type: text/html
書き込みました
current dir = D:/Inetpub/wwwroot
-----------ここまで----------------
何もかも失敗している感じですね。
ぎんさん、ありがとうございます。
結果はこうでした。
-----------ここから-----------------
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
-----------ここまで-----------------
ヘッダの分解?
すみません。今日はあまり時間がないもので、とりあえず結果報告しました。
ふじ
1999/11/08(月) 20:29:35
まとめて、いくつか確認しましょう。
1. chdir の引数には何を指定していますか?
chdir("C:\Inetpub\scripts");
これだと駄目です。
chdir("C:\\Inetpub\\scripts");
または、
chdir('C:\Inetpub\scripts');
または、
chdir("C:/Inetpub/scripts");
上記のいずれかのように指定します。
2. data.txt はどこに作りたいんですか?
例えば C:/Inetpub/wwwroot/hoge に作りたいならば(適切にアクセス権を指定した上で)
open("> C:/Inetpub/wwwroot/hoge/data.txt");
とフルパスで指定したらどうなりますか?
3. 「IUSER_なんとか」というユーザーのフォルダへのアクセス権は
どうなってますか?
初心者
1999/11/10(水) 09:16:47
ふじさん、ありがとうございます。
>1. chdir の引数には何を指定していますか?
D:/Inetpub/wwwroot/cgi-bin
というフォルダを使っています。
指定は("C:/Inetpub/wwwroot/cgi-bin");
にしました。
>
>2. data.txt はどこに作りたいんですか?
D:/Inetpub/wwwroot/ahoとします。
>例えば C:/Inetpub/wwwroot/hoge に作りたいならば(適切にアクセス権を指定した上で)
>open("> C:/Inetpub/wwwroot/hoge/data.txt");
>とフルパスで指定したらどうなりますか?
フルパスで指定してみました。
>
>3. 「IUSER_なんとか」というユーザーのフォルダへのアクセス権は
>どうなってますか?
匿名アクセスを許可する設定になっています。
ところがどっこい、
--------------ここから-------------------
can't open data.txt Permission denied Content-type: text/html
書き込みました
current dir = D:/Inetpub/wwwroot/cgi-bin
--------------ここまで-------------------
なんですよね。
WEBのルートはD:\で、perl32はC:\に入っているんです。でも構成で「perl.exe」
が動くように指定しているんですよ。
何か関係ありますかねぇ。
すみません。
hiro-kim
1999/11/10(水) 16:33:27
冗長な繰り返しになってもかまいませんから,もっと明確に提示しませんか。
10行程度のスクリプトなら,ソース全行を毎回そのまま提示する方がよいです。変更した1行を説明するのではなく,このスクリプトを実行したらエラーメッセージはこれ,と提示してみてください。
>3.「IUSER_なんとか」というユーザーのフォルダへのアクセス権はどうなってますか?
>匿名アクセスを許可する設定になっています。
これも,もっと具体的に表現してほしいです。
IIS のインターネットサービスマネジャで
「既定のWebサイト」のプロパティ → 「ホームディレクトリ」タブ → アクセス権
と進むと,「書き込み」にチェックが付いており,
エクスプローラで
「D:\Inetpub\wwwroot」のプロパティ → 「セキュリティ」タブ → アクセス権
と進むと,Everyone または IUSR_ComputerName に対して「追加,変更,フルコントロール」などの書き込み権限が与えられている
わけですね。
初心者
1999/11/10(水) 18:22:02
[[解決]]
すみません!hiro-kimの書き込みで謎が解けました。
私はアクセス権について誤解をしていました。
インターネットサービスマネージャのディレクトリセキュリティで匿名アクセスを許可すれば、それでOKだと思っていました。
エクスプローラで設定を行ったところ、正常に動作しました。
不勉強と曖昧な表現で皆さんにご迷惑をおかけしたことを、お詫びします。
無責任官庁さん、ふじさん、ぎんさん、hiro-kimさん、ありがとうございました。
もっと勉強しますね。
[上に]
[前に]
[次に]