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

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

解決したい問題
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`;
~~~~~~~~~~~~~~~~~~~~


情報が少なく申し訳ないのですが、問題箇所が分かる方いらっしゃいませいたら、どうぞ御教授お願い致します。

A 回答 (5件)

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";
    • good
    • 0
この回答へのお礼

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

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

と表示されました。
どうやら、chmod、systemともに正常に動作していないようです。
このようなデバッグ手法は知らなかったので、非常に有難いです。ありがとうございます。

お礼日時:2012/03/13 20:43

system 関数の引数をバッククォートで囲っているように見えます。

バッククォートで囲っていると意味が違ってきます。system の引数のクォートをシングルクォート又はダブルクォートに変更してみては?
    • good
    • 0
この回答へのお礼

>kumoz様

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

ご指摘の通り、バッククォートをシングル/ダブルクォートに変更して実行してみましたが、結果は変わりませんでした。

お礼日時:2012/03/12 21:00

一応確認ですが。



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

どちらですか?
    • good
    • 0
この回答へのお礼

>taloo様

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

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

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

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

とした際、画面に「moge」と表示されるからです。

お礼日時:2012/03/12 20:21

> chmod 755 /var/www/cgi-bin



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

>kmee様

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

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

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

追加ですが、
chmod 777 /var/www/cgi-bin とした場合でも不可でした。

お礼日時:2012/03/11 22:34

全く見当外れのことを言うかもしれないが…。



result.txtを書き込もうとしているディレクトリに、書き込み権限はあるの?
    • good
    • 0
この回答へのお礼

>edomin7777様

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

コマンドが違うのでしょうか?

お礼日時:2012/03/11 20:23

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