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

perlの勉強をしていて困っています。
perlをHTML表示で実行した時にファイルが書き込みモードで開けません。コマンドラインで実行すると開いて書き込まれます。よってファイルの書き込み禁止などでは無いようです。以下がソースです。

#!/Perl/bin/perl
$|=1;
print "content-type: text/html; charset=Shift_JIS\n\n";
open(OUT, ">other.html") or die "not open";
print OUT "test";
close(OUT);

読み込みモードでは成功します。フリーのCGIなども見ましたが通常は出来るはずだと思うのですが・・・。
ちなみにperlはApache2.0で動作させています。こちらの設定の問題でしょうか?

A 回答 (6件)

そのソースのままで(perlのパスだけうちのに書き換えて)


WinXP+Apache2.0.55 でちゃんと書き込めてますよ
デフォルト状態のwindowsのフォルダなら書き込み可なので
仮にパスが違っていても、新たにfileが生成されますし、、、
一応判りやすくするために
#!/usr/local/bin/perl
$|=1;
print "content-type: text/html; charset=Shift_JIS\n\n";
open(STDERR, ">&STDOUT");#エラーを画面に表示
open(OUT, ">>other.html") or die "not open";
print OUT "test<BR>\n";
close(OUT);
__END__
と変えて ブラウザで http://***/****/a.cgi にアクセスすると何も表示されませんがエキスプローラで確認するとother.htmlが生成されています。
http://***/****/a.cgi をリロードしてから
ブラウザの別タブで file:///C:/home/hoge/public_html/other.html とfileとして開いて CGIの方をリロードするたびに fileの方もリロードすると ちゃんと2行、3行と増えていきます
エキスプローラでother.htmlを右クリックしてプロパティ
>読み取り専用にチェックを入れ(unixで言うパーミッション -wxですな)

再度CGIにアクセスすると
not open at C:/home/hoge/public_html/a.cgi line 5.
とエラーメッセージが、、、
答えになっていませんが、参考になりませんか?
    • good
    • 0
この回答へのお礼

詳しいご説明ありがとうございます。
上記を試してみましたが、やはりダメです。
とりあえずperlのプログラムに問題がある訳ではないみたいですので、他のPCで試してみる事や、apacheの再インストール、あるいはapache以外のwebサーバーで試してみます。

お礼日時:2006/05/09 17:56

OSがWindowsということなので、アクセス権限ではないと思いますが、


「書き込みができない」という確認はどのようにされましたか?
それぞれ対処法は違いますので、以下の点でどの状態になっているのか、教えていただけますか?
(解決されているのであればいいのですが)

1) ファイルをオープンできない("not open"が表示される)のか、
2) ファイルがない状態でCGIを動かすと、ファイルが作成されるが、ファイルの内容は何も書かれていないのか、
3) あらかじめ何かを書いて保存しておき、そのCGIを動かすとファイルの内容が消されるのかどうか

たぶん関係ないと思いますが、
$|=1;
をコメントアウトして、出力バッファを使うようにしてみるとどうなりますか?
また、正常に保存できたとして、HTMLは出力されていますでしょうか?
(HTMLを出力しなくても保存はできますが、ブラウザにはInternal serever errorが表示されますので、誤解されてるだけのこともありますので、一応確認を、、、)
    • good
    • 0
この回答へのお礼

返答ありがとうございます。Apacheを入れなおしたら解決しました。初めて質問したので問題解決の手続きをしていませんでした。お手間をとらせて申し訳ありませんでした。

とりあえず質問にお答えします。
1)not openと表示されます。
2)ファイルも作成されませんでした。
3)消されません。

$|=1;をコメントアウトしますと、エラーは出ませんがopenコマンドは実行されませんでした。コマンドラインで正常に動作した場合はHTMLで出力されます。以上です。

お礼日時:2006/05/10 09:00

Windows XP + Perl + Apache という事で…


当方も同じ環境があるので試してみました。
test.cgi として other.html は置かずに試してみると…
test.cgi と同ディレクトリに other.html が作成されて
ちゃんと書き込みも出来ました。
一度 other.html を削除して試してみては…
また Apache の error.log には何かエラーを吐いてないでしょうか?
    • good
    • 0
この回答へのお礼

返答ありがとうございます。Apacheを入れなおしたら解決しました。初めて質問したので問題解決の手続きをしていませんでした。お手間をとらせて申し訳ありませんでした。

お礼日時:2006/05/10 08:56

これはOSによって違うことですが、たとえば UNIX 系 OS の場合、ウェブサーバのプロセスの uid とディレクトリのオーナーが違っていて、尚且つパーミッションが 770 などの、他の人が書き込めない状態になっているとファイルは作れません。



また、Linux で SELinux の機能により読めないとか書けないとかCGIが実行できないとかの症状が出ることがあります。

ただこのような原因だった場合、 OS や環境固有の問題であり Perl の問題ではありません。OS やそのバージョン (またはディストリビューションとそのバージョン) やファイルシステム、使用しているウェブブラウザとそのバージョンなどを明らかにして他のカテゴリで聞いた方がいいかも知れません。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。
どうやらperlの構文の問題ではなさそうなので、とりあえずもやもやは取れました。

お礼日時:2006/05/09 17:59

コマンドラインではどのように確認を?



> perl ファイル名.cgi

↑こんな感じでしょうか?
とすると…perl のパスが間違っているとか・・・
あるいは unix 系 OS 上での事でしたら
ファイルのパーミッションに問題ありとか・・・
サーバエラーとは表示されませんか?
単純に書き込み出来ないだけでしょうか?

この回答への補足

確認はren10さんの通りです。
書き込みだけで、ほかのプログラムは動きますのでパスではないと思います。コマンドラインでは書き込めるのでパーミッションではないと思います。OSはWindowsXPでpwel5を使用しています。
単純に書き込みだけが出来ないんです。訳がわからないです。

補足日時:2006/05/09 17:22
    • good
    • 0

その other.html のファイル名をフルパスで書いてみたらどうでしょうか。

    • good
    • 0
この回答へのお礼

返答ありがとうございます。フルパスも試してみましたがダメでした。
通常は問題なく出来るはずなのかどうかだけでも知りたい所です。

お礼日時:2006/05/09 15:59

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