dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

ホームページを移行し現在はレンタルサーバを利用しております。
OS:Windows2000Server
WebServer:IIS 5.0

CGIで作成されている掲示板があるのですが
書き込みをすると

ERROR - Can't write サーバのパス/ファイル名

が表示されてしまいます。

本来であれば、cgiで処理された掲示板に書き込まれる情報がdatファイルに書き込まれるはずなのですが、ここで必ずエラーになります。


レンタルサーバの説明書きによれば
Windows2000 Server+IISにて、CGIとASPの動作環境をご提供しております。
と書いてあります。


サーバにアップする前に、APACHEとBLACK JUMBO DOGにてローカル仮想サーバ上で試しましたが、この時点では問題なく動作しております。


この現状を回避するための方法として・・・

IISで使用する際、chdirが必要であるとのことは調べて判明しましたが、それでも直りません。

Windowsサーバですので、パーミッションの概念もないですよね・・・。何故書き込みができないのでしょうか??


もし何かお気づきの点がございましたら、教えて下さい!!<m(__)m>

よろしくお願いいたします。

A 回答 (4件)

>Can't open perl script **/**.cgi": No such file or directory


このエラーメッセージだとすると単にcgiのfile名を間違えてアクセスした場合に出ますね
 例:abc.cgi にacb.cgi でアクセスしようとした
 普通のhtmlとちがってCGIだとこのようなメッセージになるようです 

>ご記入頂いたcgiは無事動きました。
という事はIISの汎用な意味でのカレントディレクトリ問題は
それでOK、、だがそのサーバー独自の設定もしくは
そのスクリプト独自の問題かな?
・まずサーバーの設定に関しては、その公式サイトのcgiのFAQかどこかにヒントが隠れていませんか?
 例えば
  ・データログとして ***という名前の空Fileをあらかじめ設置しておき とか
  ・CGIは cgi-bin/***/ において データ(ログ)Fileは hoge/***/ 以下に置いてくださいとか?

・スクリプト独自の物については判りませんが、どこかで配布されているものなら配布URLを教えてください
 *そうでないなら
  ・ openするfileだけでなく 例えば require などもカレントディレクトリの影響を受けますので
   #2で書いたchdirを含む3行は #!/usr/bin/perl(もっともIISだとこの行は不要だが)
   のすぐ下に記述してください
  ・それでも駄目ならchdir 行のすぐ下に
$| =1;
print"Content-type: text/html; charset=Shift_JIS\n\n";
open(STDERR,">&STDOUT");
   と3行書き足します
   それから openの記述全てに |die(__LINE__ ."行目でERRORです--") を付けてください
例:
open(N,">>$path")|die(__LINE__ ."行目でERRORです--");

fileが開けないことが原因でエラーになる場合は
この記述をすることによって スクリプトの何行目で失敗しているかがブラウザのウィンド内に表示されます
また上記のrequire で失敗している場合は
Can't locate jcode.pl in @INC (ライブラリpath)スクリプト名 line 9. <=この場合だと9行目のrequire文で失敗しています
 

この回答への補足

本当に何度もお答え頂いてありがとうございます!!

ホントは、そこの会社が独自に作らせたcgiがあるんですが、とりあえずまずレンタルサーバの会社が推奨している掲示板があったので、それを使用してみることになりました。

http://www.kent-web.com/bbs/aska.html

こちらになります。


中身を見ると、今回ご指摘頂いたものが入っていないんです・・・。

またご意見頂ければと思います!!m(__)m


また、仰る通り、plも絶対パスにて指定しなければダメでした。

ご記入頂いた内容を含めもう少しやってみます!!

補足日時:2006/05/19 23:31
    • good
    • 0

>例: open(N,">>$path")|die(__LINE__ ."行目でERRORです--");


すみません | が1本抜けてました
open(N,">>$path") || die(__LINE__ ."行目でERRORです--");

または
open(N,">>$path") or die(__LINE__ ."行目でERRORです--");
取り合えずそれだけ、後はまた時間のあるときに見てみます
    • good
    • 0

数年前にIIS用に書いたスクリプトを引っ張り出してきました



print "Content-type:text/html; charset=Sshift_JIS\n\n";
$Data_Path=$0;
$Data_Path =~ s|[^\\]*$||;
# この時点で$Data_PathにCGIのある場所のパスが入っている
print "\$0 = $0 \$Data_Path = $Data_Path ";
#TESTとして表示してみる
print"<hr>\n";
chdir $Data_Path;
# CGIのある場所にカレントディレクトリを移す
# 試しに01.txtの内容を表示してみる
open(R,'./01.txt');
print <R>;
close (R);
__END__
取り合えずこんなのを置いて、同じディレクトリに適当な文字を書いた 01.txtを置いてから
アクセスし $0 = D:\home\test01\www\01\03\test.cgi $Data_Path = D:\home\test01\www\01\03\
のような文字列と 01.txtの内容が表示されれば成功なので

で、これを掲示板CGIのfileをopenする記述より上に

$Data_Path=$0;
$Data_Path =~ s|[^\\]*$||;
chdir $Data_Path;

の3行を追加するか、または chdirではなく
$log = $Data_Path ."ibbs.dat";
# $Data_Path の後ろの . (ピリオド)をお忘れなく
とfileをパスつきで指定してもOK

この回答への補足

早速試してみました!!

しかし・・・今度は違うエラーが・・・。

Can't open perl script ファイルのディレクトリ/ファイル名になってしまいました・・・。何故でしょうか・・・??

補足日時:2006/05/18 22:02
    • good
    • 0
この回答へのお礼

うぉぉぉぉ!!ありがとうございます!!<m(__)m>

早速家に帰ったら試してみます(すいません、今は仕事場です・・・_| ̄|○ )

さしあたり、上記にご記入頂いたスクリプトから挑戦してみます!!

本当にありがとうございます!!<m(__)m>

お礼日時:2006/05/18 16:31

windows上のapache他のhttpdとIISではカレントディレクトリが違う事がありますので


CGIがデータfileのある場所とは違うディレクトリにアクセスしているのかもしれません。
宜しければ openしようとしているfileのパスをどう指定しているか補足に書いてください
例えば $dat_file='./data.log'; とか $dat_file='data.log'; だと駄目かもしれません

この回答への補足

早速のご回答ありがとうございます!!<m(__)m>

$log = "./ibbs.dat";

となっております。おそらく、仰っている内容の通りだと思います。

これでは他の場所にアクセスしに行ってしまっていると言うことでしょうか??

その場合の解決策は、どのような形になるのでしょうか??

大変お手数ですが、ご教授頂ければと思います。

ちなみに、保存場所はサーバ上の
d:/users/*****/Cgi-bin/bbs/になります。

補足日時:2006/05/18 15:29
    • good
    • 0
この回答へのお礼

何度もすいません!!

上記には出来なかったと記述しましたが、ご記入頂いたcgiは無事動きました。

しかし、実際に目的のcgiに入れると動きません・・・。メッセージも変わりません・・・。

入れ方に問題があるんでしょうね・・・。

何故でしょうか・・・。

お礼日時:2006/05/19 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!