みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

open関数のファイル操作について

プログラミング経験ゼロで、CGI及びPerlを勉強しだした者です。
初歩的な質問で恐縮ですが、おわかりになる方ご教授願えますか。

open (ANSWER, ">>data.txt");
print ANSWER "$jikan,$data?n";
close (ANSWER);

open関数の箇所を上の様に書いたのですが、自動生成されるはずのdata.txtファイルが見当たりません(CGI-Executablesフォルダ内)
ではということで、data.txtファイルを作ってCGI-Executablesフォルダ内に置いてみたのですが、そちらにも書込みされませんでした。
ブラウザではフォーム入力の次に用意した「出力完了」のページに切り替わるのですが、やはり出力はされていないということでしょうか。
どのように修正すれば良いのか困ってます。よろしくお願いします。

投稿日時 - 2009-10-27 00:10:15

QNo.5399590

すぐに回答ほしいです

質問者が選んだベストアンサー

パーミッションが間違っている可能性があります。

試しに、以下のように変更して実行してみてください。
open (ANSWER, ">>data.txt") || die $!."\n";
#これ以降は特に変更ありません。
#ちなみに$!は直前の標準エラー内容が入った特別な変数です。

permision denined的な文字列がありましたら、
ファイルを作成することのできないパーミッションになっております。
Mac上のCGIが動作するフォルダは、デフォルト「/Library/WebServer/CGI-Executables/」となっていますので、CGI-Executablesのパーミッションを変更すれば動くと思います。
#sudoでchmodを実行する必要があります。
#デフォルトの設定ですと、777に変更すると動くと思います。

ただ、セキュリティ面での不安もありますので、
このMacでのWeb公開はしない方がよいと思います。
#あくまでも、ご自分の勉強で使用の範疇でしたら問題ないですが、
#もしするのであれば、Apacheやセキュリティの勉強が必須となってきます。

投稿日時 - 2009-10-27 04:23:50

お礼

回答ありがとうございます。
ご指摘の通り、パーミッションが間違っていたようです ^^;

早速教えていただいたように、open (ANSWER, ">>data.txt") || die $!."?n";と変えて実行してみました。
500番のエラーが出ましたがよくわからないので、CGI-Executablesのパーミッションを確認したところ、775になっていたので777に変更しました。以降正常に作動しています。

とりあえずこのマシンはスタンドアローンでいきます。
たしかにサーバーについてもっと勉強しないと無理ですね。
ありがとうございました。

投稿日時 - 2009-10-27 17:30:23

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)