perlでファイルが作成できません

このQ&Aのポイント
  • perlに関しては素人でうまくいかず悩んでいます。amezo.cgiと同じフォルダや上位フォルダにはhtmlファイルを作成できるのですが、testbbsフォルダを指定したら生成できなくなってしまいます。
  • linuxでamezo.cgiからファイルを作成したいですが、testbbsフォルダを指定したらファイルを生成できません。環境変数などの指定が必要なのでしょうか?
  • perl初心者です。amezo.cgiからファイルを作成したいのですが、testbbsフォルダを指定するとファイルが生成されません。どうすれば作成できるでしょうか?
回答を見る
  • ベストアンサー

perlでファイルが作成できません

初めて質問させていただきます。 perlに関しては素人でうまくいかず悩んでおります。 皆様のお知恵を拝借できればと思います。 linuxで下記のようにamezo.cgiからファイルを作りたいのですが、 ファイルを生成したい場所だけ作成することが出来ません。 amezo.cgiと同じフォルダや上位フォルダ(htmlフォルダ)にはhtmlファイルを作成できるのですが、 testbbsフォルダを指定したら生成できなくなってしまいます。 なんらかの環境変数なり指定する必要があるのでしょうか? ご教授よろしくお願いいたします。 html-------testbbs------ファイルを生成したい場所     |     |     -----cgi-bin-----amezo.cgi | .....

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • TYWalker
  • ベストアンサー率42% (281/661)
回答No.2

念のため、/var/www/html/testbbs/というフォルダはあるんですね? コマンドラインで、/var/www/html/testbbs/に行って、touch fooとか書いたら、fooというファイルは出来ますか? (rootではなく、一般ユーザーで) open(NS,">/var/www/html/testbbs/$newres.html") or warn "!!! Error Log==> $!"; とやってみたらどうでしょうか。 open命令で失敗すると、その理由($!変数に格納される)が!!! Error Log==>という文字列と共にエラーログに吐き出されます。 エラーログに「何も」出ていないというのがちょっとヘンですね。 何かしら何かが表示されているものですから・・・。 あまりにも早く流れてしまっていて、ファイルの作成に失敗しているログは通り過ぎている(あるいは循環ファイルで、そのメッセージは消え去っている)とか・・・。 CGI::Carpは試してみましたか? あまりお役に立てず、スミマセン。

strayhoneybee
質問者

お礼

有難うございます! open(NS,">/var/www/html/testbbs/$newres.html") or warn "!!! Error Log==> $!" をためしたらPermission denied と出ました! 777にしてもパーミッション足らないと言われるのは意味分かりませんが原因が分かったので少し進みました! 有難うございます!

strayhoneybee
質問者

補足

貴重な情報有難うございます。 CGI::Carp試してみました。とても便利ですねこれ。。 直前でdieを行うと何故かファイルが生成されることが分かりました。 全然意味分からないですね 不自然ですが書き込めたのでパーミッションの問題ではなさそうです。また、ファイル名が違うという事でもなさそうです。 open(NS,">/var/www/html/testbbs/test.html") ; だけですとtest.htmlは生成されません。 use CGI::Carp qw(fatalsToBrowser); die "aaa"; open(NS,">/var/www/html/testbbs/test.html") ; こうするとdieでaaaが出るのですが何故かtest.htmlが生成されています。 もはや根本的におかしいような気がしてきました。

その他の回答 (1)

  • TYWalker
  • ベストアンサー率42% (281/661)
回答No.1

HTTPサーバーはApacheという認識でいいでしょうか。 CGIプログラムはnobodyというユーザーで走りますので、フォルダにこの人の書き込み権限を与えてやればいいと思います。 現状でcgi-binフォルダには書き込み権限があるようですので、ここと同じ権限をtest.cgiに与えてやればいいのではないでしょうか。 「パーミッション」「chmod」などで検索してください。 パーミッションはFTPクライアントで変更しても手軽です。 なお、ファイルを作成しようとして失敗した瞬間には、何らかのログが残っているのが普通です。 「Apache」「エラーログ」などで検索してみてください。 お使いのHTTPサーバーの設定によってログのファイル名は違います。 ログファイル名がわかれば、エラーを起こさせて、すぐにtailコマンドでログファイルの末尾を見ればたいてい原因が分かります。 でも、ログファイルをいちいち見るのは面倒なので、その場合はCGI::Carpを使えば、エラーログを自分が便利なファイルや、CGIのブラウザー画面に表示できます。 http://homepage3.nifty.com/hippo2000/perltips/CGI/Carp.html いろいろやってみてください。 たぶん、十中八九パーミッションの問題ではないでしょうか。

strayhoneybee
質問者

お礼

有難うございます。 apacheのエラーログには何も残っていません。 パーミッションも777に設定しても作成されない状況です。 open(NS,">$bbspath$folder/$newres.html"); を open(NS,">$bbspath/$newres.html"); にしたり open(NS,">/var/www/html/$newres.html"); にしたら作成されますが、 open(NS,">/var/www/html/testbbs/$newres.html"); にすると作成できなくなります。 パーミッションは777でも作成できません。 すみませんがこの情報で原因が分かりますでしょうか?

strayhoneybee
質問者

補足

有難うございます。 apacheのエラーログには何も残っていません。 パーミッションも777に設定しても作成されない状況です。 open(NS,">$bbspath$folder/$newres.html"); を open(NS,">$bbspath/$newres.html"); にしたり open(NS,">/var/www/html/$newres.html"); にしたら作成されますが、 open(NS,">/var/www/html/testbbs/$newres.html"); にすると作成できなくなります。 パーミッションは777でも作成できません。 すみませんがこの情報で原因が分かりますでしょうか?

関連するQ&A

  • FreeBSDのperl

    自分のPCでCGIが動かずに苦戦しているのですが 環境はpc9821にFTPでインストールしてUSER環境を 選択しています。この環境でperlへのパスをCGIを使うためのファイルを/usr/bin/perlに指定していたとおもうのですがperlはきちんとうごいているのでしょうか? USER環境にはperlははいっていないということはありませんでしょうか?よろしくおねがいします。

  • PERL 宣言文 -wについて

    Perl初心者のWEBサーバエンジニアです。 サーバの移行に伴ってCGIファイルが動作していないため、ご相談になります。 【サーバ環境】 perl実行パス      /usr/local/bin/perl シンボリックリンク   /usr/bin/perl => /usr/local/bin/perl ソース記述       #!/usr/bin/perl ヴァージョン      5.8.5 perl実行環境      http://△△△.jp/cgi-bin/ ※apacheのスクリプトエイリアス指定 options +ExecCGI -Include SetHandler cgi-script 上記の環境で、cgiファイルが500internalサーバエラーになる現象が発生しています。 ファイルは以前動作したサーバから引っ張ってきました。 原因を探っていたのですが、cgiファイルのソース記述を #!/usr/bin/perl -w と記述を変更すると正常に動作しました。 -w について 【1度しか出現しない識別子や、初期化されずに参照される変数など、危険、無駄と思われる処理の警告を出力します。実際にはもっとたくさんの種類のチェックをするようです。】 と言う事はわかりましたが、いままで、-wなしで動作していたので、-wなしで動くよう、perlの設定を変更したいとかんがえております。 なにぶんPERL初心者ですので、同様の事象で知見がある方、ご教授を宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • #!/usr/local/bin/perlの変更。

    ┬ cgi_script │   └***.cgi │ └ access_g     └11111       └22222         └***.cgi 今まで、cgi_scriptフォルダの直下にあるcgiファイルの一番上の行は #!/usr/local/bin/perl できちんと動作していました。 今は、そのcgi_scriptフォルダと同じところにあるaccess_gフォルダの中にある、 11111フォルダの下の2222フォルダの下にあるcgiファイルを実行させたいのですが、 #!/usr/local/bin/perl をどのように変更していいかわからなくなってしまいました。 動作させたいcgiファイルはcgi_scriptフォルダの中に入れたところきちんと動作したので、 動作上の問題はないと思われます。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • Perlのアドレスについて

    はじめまして、 Webサーバー初心者です。 CGIを動かすモジュールを入れて実際自分のサーバーでCGIを動かそうと思ったんですが、CGIのプログラムの頭にある「#!user/local/bin/user」(←例です)などのアドレスの指定がよくわかりません。よく、レンタルサーバーとかであると「うちのPerlのアドレスは#!user/local/bin/user」ですなどと表示されていたりしますが、今回は自分がサーバーなのでほかのユーザーがPerlを使うときにアドレスを指定してあげないといけません。どうしたら自分のサーバーのPerlの場所の指定ができるのでしょうか?(ようは,私の場合どのようなアドレスになるのかが知りたいわけです) ちなみにPerlのインストール先は「C:\Perl」でソフトは「Active Perl」を使用しております。サーバーのOSはWindowsXP(Pro)です。 よろしくお願いします。

  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlのパス

    レンタルサーバーのCGIの説明で、「1.perl のパスは、/usr/bin/perl です。2.プログラムの先頭の記述は必ず、#!/usr/bin/perl となります。」って書いてあるんですけど、これを使用する場合、 http://www.kent-web.com/data/cart.html たぶん、admin.cgi , cart.cgi , order.cgi を エディタ で開いて以下の箇所をあたまの部分、#!/usr/bin/perl を変えればいいんですかね?それで1.の/usr/bin/perl は何処に書くのかな?それとも説明 の前置きですかね?「1.perl のパスは、」という意味はリンクがこうなるよ!って意味ですかね? ただま、KENT WEBみながら苦戦してます。 シロウトですいません。

    • ベストアンサー
    • Perl
  • Perlでファイルの新規作成

    Perl中級者です。 フォームから受け取ったデータの一つをファイル名として 新たにデータ保存用のファイルを自動生成することは可能でしょうか? ログを定期的に別ファイルとして保存する掲示板や、cgiファイルさえ設置すれば必要なデータ保存用ファイル(空ファイル)を自動生成してくれるようなスクリプトを見かけますので、不可能ではないと思っているのですが・・・。 <作りたいスクリプトの概要> 1.管理者が管理用フォームで文字列Aを登録する。 2.A.datという名のファイルが自動生成される。 3.閲覧者がAについて閲覧者用フォームで送った内容がA.datに書き込まれる。 4.管理者用ページでA.datの内容が一覧表示される。 というもので、2の部分が分かりません。 可能であるならば、その方法をご教授願います。 不足情報がありましたら補足します。

    • ベストアンサー
    • Perl
  • 「#!/usr/bin/perl --」でなければ動作しないのはなぜ?

    新しい職場に来て、あるCGIの設定を依頼されたのですが、どのような設定になっているのか、どのプログラムをアップしても「Internal Server Error」になってしまいました。 人に聞いて、「#!/usr/bin/perl」を「#!/usr/bin/perl --」としなければ動かないことまでは分かりました。 確かに、先に他の方が作成されたらしいCGIプログラム(単純な構成のものばかりです)ではすべて「#!/usr/bin/perl --」となってました。 こうしなければ、どんな簡単なプログラムでも絶対に動かないようです。 「*.cgi」というファイルが1つのみ(他の構成ファイルは他の形式)というプログラムならその方法で動いたのですが、複数の「*.cgi」ファイルで構成されているものはどうしても動きませんでした。 構成するファイルの中に、先頭に「#!/usr/bin/perl」の行がないファイルもあるのですが、もしかしてそのせいでしょうか? その場合、どうしたら解決できますか? そもそも何が原因なのでしょう? 今まで、色々な会社でCGIをいじってきましたが、初めての経験で戸惑っています。 FFFTPの設定(開業など)の問題ではないように思えるのですが、サーバーの設定がおかしいのでしょうか? 「#!/usr/bin/perl --」としなければ絶対に動かないというのは、どういう場合に起こる現象なのですか?

    • 締切済み
    • CGI
  • perlの設定

    Infoseekの無料HPを利用しています。 下記サイトの「とりかえっ語」というcgiをダウンロードしてHPスペースにアップしました。 http://www5a.biglobe.ne.jp/~comrade/ しかし、 「一行目の #!/usr/local/bin/perlはサーバーの環境に合わせて下さい。 実行ファイルの$back_htmlで戻る場所を指定して下さい。」 http://www5a.biglobe.ne.jp/~comrade/town/exchange.htm という意味がわかりません。(^_^;) ちなみに、パーミッションの設定はやりました。 perlの設定は全然わかりません。全くの素人です。(^_^;) どうすれば使えるようになるのか教えていただけると大変有り難いです。 よろしくお願いします。m(_ _)m

    • ベストアンサー
    • CGI
  • Perlで圧縮ファイルを作成するには?

    質問なんですが・・・ perlで、ディレクトリ毎圧縮してしまうようなことが出来るのでしょうか? 検索条件に一致したレコードを取り出し、複数のcsvファイルをperlで作成するのですが、ダウンロードをまとめてさせたいと考えています。 圧縮形式はzipまたはlzhを予定しています。 環境としては、perl5、サーバーはLinuxです。