いつもお世話になっております。
ホームページを移行し現在はレンタルサーバを利用しております。
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>
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
>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も絶対パスにて指定しなければダメでした。
ご記入頂いた内容を含めもう少しやってみます!!
No.4
- 回答日時:
>例: open(N,">>$path")|die(__LINE__ ."行目でERRORです--");
すみません | が1本抜けてました
open(N,">>$path") || die(__LINE__ ."行目でERRORです--");
または
open(N,">>$path") or die(__LINE__ ."行目でERRORです--");
取り合えずそれだけ、後はまた時間のあるときに見てみます
No.2
- 回答日時:
数年前に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 ファイルのディレクトリ/ファイル名になってしまいました・・・。何故でしょうか・・・??
うぉぉぉぉ!!ありがとうございます!!<m(__)m>
早速家に帰ったら試してみます(すいません、今は仕事場です・・・_| ̄|○ )
さしあたり、上記にご記入頂いたスクリプトから挑戦してみます!!
本当にありがとうございます!!<m(__)m>
No.1
- 回答日時:
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/になります。
何度もすいません!!
上記には出来なかったと記述しましたが、ご記入頂いたcgiは無事動きました。
しかし、実際に目的のcgiに入れると動きません・・・。メッセージも変わりません・・・。
入れ方に問題があるんでしょうね・・・。
何故でしょうか・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- SSL・HTTPS 掲示板サイトへの書き込みができない件(ブラウザソフトを変えてもできない) 2 2022/11/20 10:48
- Windows 8 QTTabBarが無反応になる 2 2023/04/07 14:17
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- その他(OS) Ubuntuに仮想環境いれて古いwindows動かしたいんですが、OSイメージ無料で手に入りますか? 2 2023/03/09 23:49
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
- サーバー FTPサーバについて詳しい方(アクセス権のないディレクトリを非表示にする方法) 4 2022/08/22 22:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
フォームを再送信しますか?
-
apacheでPerl CGIが作動せず、5...
-
/bin/awk '{print $5}'ってどう...
-
ラズパイでのCGIで、pythonソー...
-
POSTメソッドの最大容量について
-
cgiのパスについて
-
CGIって何ですか?簡潔に教えて...
-
入力フォーム(電話番号)
-
メールフォームへ投稿される迷...
-
フォームメールを受信すると文...
-
クッキーが別PCで共有されてしまう
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで集計したい。
-
apacheでPerl CGIが作動せず、5...
-
フォームを再送信しますか?
-
(フリーの)ツリー掲示版CGI、...
-
ホームページでCGIのフォームを...
-
POSTメソッドの最大容量について
-
一番簡単なCGI,掲示板の設置教...
-
CGI.pmはもう古い!?
-
CGIって何ですか?簡潔に教えて...
-
入力フォーム(電話番号)
-
cgiの注釈が出来ない
-
/bin/awk '{print $5}'ってどう...
-
サイト訪問者の情報を取得したい
-
テキストエリアの<br />を非表...
-
CGIでラジオボタンの選択結果を...
-
3DCG
-
CGI経由PDFダウンロードでエラー
-
CGIでhtmlページを表示する
-
CGIの記述について教えてくださ...
-
perlで書いたcgiでsqliteの使い...
おすすめ情報