OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

cgiのsystem関数を用い、ファイル作成したい

  • 困ってます
  • 質問No.7356111
  • 閲覧数712
  • ありがとう数6
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 100% (8/8)

いつもお世話になっております。
今回、質問させて頂く問題と内容は以下になります。

解決したい問題
cgiから、自作した実行ファイル「create_file」を動かしファイルを作成したい。

構成は以下になります。
OS:Ubuntu 10.10

作業ディレクトリ
/var/www/cgi-bin

ファイルと機能
index.html : cgiの呼び出し用html。
create.cgi : 実行ファイル「create_file」を呼び出す。
create_file : 実行ファイル。実行すると同ディレクトリに”result.txt”を作成する。

以上の構成でindex.htmlを開いた際にcreate.cgiがcreate_fileを呼び出し、result.txtを
同ディレクトリに作成するようにしたいのですが、実現できません。

create_file単体を実行した際は、同ディレクトリにresult.txtが作成されるので、create_fileを呼び出す箇所が上手くいっていない様です。

尚、create.cgiにおけるcreate_file呼び出しを以下のようにしています。

index.html
<HTML>
 <BODY>
   <a href = "create.cgi">cgi呼び出し</href>
 </BODY>
</HTML>

create.cgi
~~~~~~~~~~~~~~~~~~~~
chmod(0755,"./create_file");
system`./create_file`;
~~~~~~~~~~~~~~~~~~~~


情報が少なく申し訳ないのですが、問題箇所が分かる方いらっしゃいませいたら、どうぞ御教授お願い致します。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全5件)

  • 回答No.1
レベル13

ベストアンサー率 40% (711/1749)

全く見当外れのことを言うかもしれないが…。 result.txtを書き込もうとしているディレクトリに、書き込み権限はあるの? ...続きを読む
全く見当外れのことを言うかもしれないが…。

result.txtを書き込もうとしているディレクトリに、書き込み権限はあるの?
お礼コメント
tanaka5667

お礼率 100% (8/8)

>edomin7777様

ご回答ありがとうございます。
書き込み先のディレクトリのには、
chmod 755 /var/www/cgi-bin
としており、書き込み権限は付与しています。

コマンドが違うのでしょうか?
投稿日時 - 2012-03-11 20:23:36


  • 回答No.2
レベル14

ベストアンサー率 55% (1857/3366)

> chmod 755 /var/www/cgi-bin /var/www/cgi-bin の所有者と、cgiを実行するユーザーは同じですか? よくある設定では、httpサーバーはnobodyで動作してます。cgi-binのオーナーがnobodyでなければ、755では書き込めません。 ...続きを読む
> chmod 755 /var/www/cgi-bin

/var/www/cgi-bin の所有者と、cgiを実行するユーザーは同じですか?
よくある設定では、httpサーバーはnobodyで動作してます。cgi-binのオーナーがnobodyでなければ、755では書き込めません。
お礼コメント
tanaka5667

お礼率 100% (8/8)

>kmee様

ご回答ありがとうございます。

/var/www/cgi-bin の所有者と、cgiを実行するユーザーは同じですか?

現在ローカルで動かしているのですが、「cgiを実行するユーザー」という内容が知識不足の為わかりません。申し訳ないです。apacheの権限が/var/www/cgi-binの所有者と異なるということでしょうか。

追加ですが、
chmod 777 /var/www/cgi-bin とした場合でも不可でした。
投稿日時 - 2012-03-11 22:34:25
  • 回答No.3
レベル14

ベストアンサー率 44% (1016/2281)

一応確認ですが。 ・CGIプログラムは動いているが、ファイルが作られていない ・CGIプログラムが動いていないから、ファイルが作られない どちらですか? ...続きを読む
一応確認ですが。

・CGIプログラムは動いているが、ファイルが作られていない
・CGIプログラムが動いていないから、ファイルが作られない

どちらですか?
お礼コメント
tanaka5667

お礼率 100% (8/8)

>taloo様

ご回答ありがとうございます。

>・CGIプログラムは動いているが、ファイルが作られていない
>・CGIプログラムが動いていないから、ファイルが作られない

現状態は前者となります。そのように判断しましたのは、

create.cgi内において、
~~~~~~~~~~~~~~~~~~~~
print "moge";
chmod(0755,"./create_file");
system`./create_file`;
~~~~~~~~~~~~~~~~~~~~

とした際、画面に「moge」と表示されるからです。
投稿日時 - 2012-03-12 20:21:09
  • 回答No.4
レベル11

ベストアンサー率 64% (113/176)

system 関数の引数をバッククォートで囲っているように見えます。バッククォートで囲っていると意味が違ってきます。system の引数のクォートをシングルクォート又はダブルクォートに変更してみては? ...続きを読む
system 関数の引数をバッククォートで囲っているように見えます。バッククォートで囲っていると意味が違ってきます。system の引数のクォートをシングルクォート又はダブルクォートに変更してみては?
お礼コメント
tanaka5667

お礼率 100% (8/8)

>kumoz様

ご回答ありがとうございます。

ご指摘の通り、バッククォートをシングル/ダブルクォートに変更して実行してみましたが、結果は変わりませんでした。
投稿日時 - 2012-03-12 21:00:49
  • 回答No.5
レベル11

ベストアンサー率 64% (113/176)

chmod も system も失敗しても致命的なエラーにならないので、自力でエラー処理をする必要があります。system に失敗しているようなら、当然同じプログラムからの chmod も失敗しているのではないかと思います。標準モジュールの CGI::Carp を使うと失敗の原因をブラウザの画面に表示してくれるので、原因の特定に役立つかもしれません。 create.cgi --------------- ...続きを読む
chmod も system も失敗しても致命的なエラーにならないので、自力でエラー処理をする必要があります。system に失敗しているようなら、当然同じプログラムからの chmod も失敗しているのではないかと思います。標準モジュールの CGI::Carp を使うと失敗の原因をブラウザの画面に表示してくれるので、原因の特定に役立つかもしれません。

create.cgi
--------------------
use CGI::Carp qw(fatalsToBrowser); # 冒頭付近に追加
...
chmod(0755, "./create_file") or die "chmod error: $!";
system("./create_file") == 0 or die "system error";
お礼コメント
tanaka5667

お礼率 100% (8/8)

>kumoz様
再度ご回答ありがとうございます。

ご指摘頂いた内容をにソースに反映させたところ、
「Software error:
system error at /var/www/cgi-bin/create.cgi line 39.

と表示されました。
どうやら、chmod、systemともに正常に動作していないようです。
このようなデバッグ手法は知らなかったので、非常に有難いです。ありがとうございます。
投稿日時 - 2012-03-13 20:43:09
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ