新しいファイルの作成方法について

[上に] [前に] [次に]
細岡拓也 [E-Mail] [HomePage] 1999/05/10(月) 23:53:57
こんにちは。はじめて書き込みます。細岡と申します。失礼な事があったらすいません。
現在、自分で一から掲示板を作ってみようと、奮闘中です。

質問です。書き込まれたデータを新しいファイルで、それぞれ一つずつ作成して管理したいのですが、どのようにすればよいのでしょうか?

現在行っている方法
open ("OUT >>data/$filename.dat"); #$filenameでファイルを作成
print OUT "$data\n";               #$dataをファイルに書き込む
close(OUT);                        #閉じる

この方法だと自分のPC上ではできるのですが(AN HTTPDで)プロバイダにアップロードした後、実行すると、ここの部分で停止してしまう事がわかっています。そこで、あらかじめ新しく作成される名前で、ファイルを沢山作っておき、そこに追加書き込みを現在行っています。

自分プロバイダではサーバーのシェルが開放されていないようなのですが、この事が関係しているのでしょうか?また、それ以外の理由があるのでしょうか?

是非教えていただきたいです。
よろしくお願いします。

匿名希望 1999/05/11(火) 01:04:30
新規にファイルを作成するときは、
open(OUT,">data/$filename.dat");
ですね。>>はあらかじめ存在するファイルに追加していくときに
使用しましょう。
しかし、ローカルでは出来るのでしょうか?

シェルの解放とCGIの動作とは関係ないと思います。

やま 1999/05/11(火) 01:05:31
↑名前を入れ忘れました。

taku [E-Mail] [HomePage] 1999/05/11(火) 01:31:51
やまさんお返事ありがとうございます。

#!/usr/local/bin/perl

if(!open(OUT, "> test.txt")){
print "Content-type: text/html\n\nBoo";
exit;
}
print OUT "test";
close(OUT);

print "Content-type: text/html\n\nOK";

上のようにテストのプログラムを作り、ホームページにアップロードしました。アドレスは
http://www.fureai.or.jp/~takuya/cgi-bin/test.cgi
です。

しかし、表示は Booとしか表示されません。
何か方法が悪いのでしょうか?
よろしくお願いします。

追伸 ローカルで、試してみたところ、>>でも>でも新規にファイルが作成されました。

細岡拓也 [E-Mail] [HomePage] 1999/05/11(火) 01:32:45
↑いつもの癖で名前を間違えました。

ふじ 1999/05/11(火) 02:16:08
ファイルを作成するディレクトリのパーミッションは
どうなってますか?
データファイルを作成するディレクトリは、CGIを置くディレクトリとは
別にしておいた方がいいですよ。
#上のソースだと、CGIの走るディレクトリにファイルを作るようなので・・・

やま 1999/05/11(火) 02:22:34
上のプログラムをそのままコピーして動かしてみましたが、期待通り
OKが表示されて、test.txtが出来ていましたよ。
http://www.yama.net/testopen/

もしかしてcgi-binディレクトリの権限が、書き込み不可状態になってるとか。。。

やま 1999/05/11(火) 02:26:10
ふじさんとダブってしまいました>パーミッション
一足遅かった・・・

細岡拓也 [E-Mail] [HomePage] 1999/05/11(火) 02:32:37
ふじさんお返事ありがとうございます。
ファイルを作成すうディレクトリのパーミッションが、755になっていました。とても初歩的な事でしたね。とても恥ずかしいです<私
ありがとうございました。

最終的なプログラム
#!/usr/local/bin/perl

if(!open(OUT, "> test/test.txt")){
print "Content-type: text/html\n\nBoo";
exit;
}
print OUT "test";
close(OUT);

print "Content-type: text/html\n\nOK";

これで、このファイルと同じところにパーミッションを777にしたtestというディレクトリを作成すれば、その中にtest.txtというファイルができるんですね。

ところで、もう一つ質問をさせてください。

やまさんがいっていた、

>新規にファイルを作成するときは、
>open(OUT,">data/$filename.dat");
>ですね。>>はあらかじめ存在するファイルに追加していくときに使用しましょう。

というのは、なぜなんでしょうか?
>>としてプログラムを実行したとしても、何の障害も無いようにおもえるのですが、、、

勉強不足ですいません。
よろしくお願いします。

細岡拓也 [E-Mail] [HomePage] 1999/05/11(火) 02:36:10
新しい質問をしたら、やまさんも書き込まれていました!
やまさんありがとうございます。

やま 1999/05/11(火) 03:09:49
>>でも新規にファイルが作成されるんですねぇ。初めて知りました。
そう思いこんでいました。
ただ、違うところと言えばやはり>>は追加なので、同じ名前のファイルが
存在すれば、それに追加されていきます。
>だと、同じ名前のファイルが存在しても、上書きします。
上の例だと、何回かtest.cgiを実行した後のtest.txtの内容が違うと思います。
この辺りは、用途に合わせて決めてもらえればいいかなと思います。

細岡拓也 [E-Mail] [HomePage] 1999/05/11(火) 13:22:44
[[解決]]
やまさんありがとうございます。
参考になりました。
これから,掲示板をもう一回作り直そうと思います!

では。

[上に] [前に] [次に]