• 締切済み

CGIが吐き出したファイルの所有者の変更

データベースCGIで作ったデータを元にhtmlファイルを吐き出すようなつくりにしています。 この、吐き出されたファイルの所有者がnobodyになっていて、FFFTPなどのソフトから修正しようとすると上書きが出来ない状態になってしまっています。 これを、CGIから吐き出す時に所有者を変える事は出来ないのでしょうか? 吐き出すところは以下のようになっています。 sub html_reg{ if (-e "../../list/$no.html"){unlink "../../list/$no.html";} open(HTML,"+>>../../list/$no.html"); &html_data; close(HTML); }

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

みんなの回答

回答No.2

chmod 0606 しておくことで対処できませんか?

master-3rd
質問者

補足

返答ありがとうございます。 >chmod 0606 しておくことで対処できませんか? これをどの部分に・どのように設定したらよいのでしょうか?

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

chown関数 http://www.rfs.jp/sb/perl/05/chown.html ただ、変更するとhttpdからそのファイルが読み取れなくなったり 意図した動作をしなくなるかもしれませんね。

master-3rd
質問者

補足

返答ありがとうございます。 ページを見ましたが、実際自分の環境にどう当てはめればいいかが良く分かりません。 どのようにしたら良いのでしょうか?

関連するQ&A

  • CGIを実行した時に作ったファイルの所有者に関して

    Proftpdとapacheを用いてWebサーバを運用していますがCGIやPHPによって作られたファイルの所有者がapacheになってしまいFTPからファイルが削除できません。 hoge.hoge.comはhogeでCGIを実行し aa.hoge.comはaaでCGIを実行することはできないのでしょうか? バーチャルホストでCGIを実行するときは何か別に記述が必要なのでしょうか? ちなみにFTPDは User   nobody Group   nobody apacheは User apache Group apache このように設定してあります。

  • Win2kで所有権の変更について

    質問No.218002で、「ファイルをコピーしただけでは所有権は変わらない」とあります。 そのファイルを別のユーザが上書き保存しても、所有権は変わらないと思いますが、複数のファイルの所有権を一度に変更する方法はないでしょうか。

  • ファイルのアップロードが出来るcgi

    HP上でpdfファイルやdocファイルを閲覧してもらおうと思っているのですが、 いちいちFFFTP等のツールを使ってUPするのではなく、 cgi上からアップしたいと考えております。 ツールを使ってだと、HTMLにリンクも貼らなければいけないですし。。。 何かそういうようなフリーソフトはありますでしょうか? 一応、自分でも探していますが、なかなかありません。 画像アップのをいじってみましたが、ムリでした^^; ヨロシクお願いします

    • ベストアンサー
    • CGI
  • CGIを実行すると、あなたが指定したファイルは見つかりませんとなる。

    趣味で自分のHPにヒロ・データベースのCGIを設置したくて、全くの初心者からCGI設置に挑戦しているのですが、初歩からうまくできなくて困っています。自分なりにネットで調べても、うまくいかないので助言を御願します。OSはwindowsXPで、CGIファイルの編集にはTerapadを、転送にはFFFTPを使っています。レンタルサーバーはtok2を使っています。  ヒロ・データベースをDLして一行目(#!/usr/bin/perl)とパーミッションをTOK2(http://tok2.com/cgi.html)の指定通り変更して設定して、アップすると500 Internal Server Errorと出て、ここで詰まってしまったので、もっと簡単なCGIから挑戦しようと思い、http://web-up.cside.biz/cgi_3.shtml を参考にして、 初歩的なCGIを設置してみたのですが、「あなたが指定したファイルは見つかりません」と出ました。このエラーメッセージから、アドレスが間違っているかファイルがアップされていないんだろうと思ったのですが、cgiファイルと同じ場所に入っているindex.htmlにはアクセスできて、index.htmlをrensyuu.cgiと書き換えてもダメ(半角英数でちゃんと打ちました)で、ファイルがアップされていないのかと思ってもFFFTPの右側のホストのファイル一覧にはrensyuu.cgiと出ています。cgiファイルはアスキーモードで転送しています。 ここまでで、何か抜けていることや、私が勘違いしているようなことが分かれば教えて欲しいです。御願します!

  • 所有者nobodyのアクセスログについて

    突然ですが、質問させて下さい。 昨年末から自前のホームページにアクセスログを集計する CGI(Perl)を取り付けております。 で、バックアップをと考えたのですが、ログの所有者がnobodyになって おるため自前PCにダウンロード出来ません。 (ページカウンターも備えておるためバックアップしたいのです) 1.こういうファイルは基本的にはバックアップ出来ないものでしょうか? 2.ログファイルはCGIが自動で作ってくれるのですがあらかじめ 所有者が自分である空の同名ファイルを作っておけば所有者nobodyは 回避出来るのでしょうか?

    • 締切済み
    • CGI
  • print HTML~をヒアドキュメントで

    CGIを改造して利用したいと思っています。 データの結果をhtmlファイルに出力するようにしたいと考えています。 sub html_reg{ open(HTML,"+>>../$no.html"); print HTML "<html>\n<head>\n"; ~~ print HTML "</body></html>\n"; close(HTML); } と言う風になっています。 しかし、通常のhtml文なので、「print HTML "~\n";」をつけるのと「""」があったときに「\"\"」にするのがとても面倒です。 と言うことで、ヒアドキュメントで記載できないかと考えたのですが、print HTML の「HTML」の部分をどのようにしたらよいかがよくわかりません。 どのように記載すればよいでしょうか?お願いします。

    • ベストアンサー
    • Perl
  • CGIで取得したログの改行と表示したときの修飾方法

    HTMLで入力した項目を下記のCGIのファイルオープンでテキストとしてデータを取りますが、追加するように指定しているので1回目の入力の後、改行して2回目の入力をしたく、最後に\nをつけています。自分のPCをウェブサーバーにして実行すれば改行されましたがプロバイダーに載せると改行しませんでした、どなたかご教授をお願いします。また、このテキストファイルを(2)のようにして他のサイトで表示しようと考えていますがこのファイルに書かれた文字のフォントなど修飾するにはどのようにするのでしょうか? ちなみにHTML&CGI歴14日ぐらいですので、厚かましいのですが分かりやすくお願いいたします。 { # ファイルに保存 open (FH,">>file1-$number.txt");# 上書きモードでオープン $line=<FH>; @filew=("$name, $object,$time,$reason\n"); print FH @filew; close(FH); exit; } (2)<IFRAME src="cgi-bin/file1-1.txt"

    • 締切済み
    • CGI
  • CGI作成ファイル所有者をEveryone等にしたい(Windows)

    CGI作成ファイル所有者をEveryone等にしたい(Windows) Windows XP SP2パソコン上で、ブラウザで自分のマシン上のファイルを閲覧したりプログラムを起動・制御しようと、Apache/2.2.4(Win32)でローカルにhttpdを立ち上げています。 ブラウザ表示文書からCGIとして呼び出されたPerl(ActivePerl 5.005_03)プログラムで、system関数からcygwinのcpコマンドを呼び出して、NTFSフォーマットされたCドライブ上で、ファイルAを新しく(既存の上書きでも同じ)ファイルBにコピーしました。 system("c:/cygwin/bin/cp -uf '$fr_file' '$to_file'"); という感じで、正常復帰してきます。 ところが、コピー先ファイルは、その所有者がSYSTEMになってできてしまいます。 こうなると、AdministratorsやEveryoneに属している自分では属性読み取り以外許されません。 いろいろなプログラムからそのファイルを開こうとしても削除しようとしても、エラーになってしまいます(ブラウザでApache経由だけは読めます)。 CGIで呼ばれたプログラムやそこから呼ばれるサブルーチンその他のソフトがどうファイルを操作しても、作られるファイルの所有者がEveryoneまたはAdministratorsになるようにする方法か、 そうでなくても誰からでも読み書き実行等フルコントロールがつくようにする方法は何かないでしょうか? この原因と対策がお分かりになる方、教えてください。 (chmod, chown, umask…全部関係ないですよね。Windows上で0777にしようとしても所有者が変わらないので状況は変わりません。Perlのstatでファイルを見るとuidもgidも0が返ってきます。) (Windowsのプロパティのセキュリティタブのところで所有者を変えてパーミッションを変える方法や、Windowsのcacls, icaclsコマンドを実行して所有者を変える方法も知っていますが、そんなことをせずに、ファイルができる前に包括的に対処したいのです。) (自分がSYSTEMに参加することもできないですよね。)

    • ベストアンサー
    • CGI
  • perl-cgi「日時によるファイル操作」について

    perl-cgi「日時によるファイル操作」について perl-cgiで、あるディレクトリ中のファイル更新日が最も若い2ファイルを表示して、それ以外を削除したいのですがどのようにすればよいでしょうか? #調べたいディレクトリを読み込む。 $Dir = "./cache"; opendir DIR,"$Dir"; my @alldir = readdir DIR; close DIR; #ファイル(パス)名と作成日時を求める。 #最新2つのファイルパス(名)を表示する。 print "NewFile".ファイルパス1; print "<HR>"; print "OldFile".ファイルパス2; #最新2つ以外は全て削除 unlink($_); exit(0);

    • ベストアンサー
    • Perl
  • 関数の中から別の関数内のforeachの実行結果を得られない

    お世話になります。 環境 perl 5.8.0 RHLinux9 以下のようにsub _Htmlからsub _List1を呼び出す場合は正常にリスト表示できるのですが、sub _List2を呼び出した場合、 Content-Type: text/html <HTML lang=ja > <HEAD>...として表示されてしまいます。 sub _List1{ @list = (0, 1, 2, 3, 4, 5); foreach (@list) { print "$_\n"; } } sub _List2{ $a1 = "./dir/data.dat"; $a2 = "./dir/data.dat"; $a3 = "./dir/data.dat"; &FileOpen('FILE1',"$a1"); &FileOpen('FILE2',"$a2"); &FileOpen('FILE3',"$a3"); @DATA = <FILE1>; push @DATA, <FILE2>,<FILE3>; close(FILE1); close(FILE2); close(FILE3); foreach (@DATA) { ($key,$val)=split(/=/,$_); print "$key=$val"; $StartNum++; } } sub _Html{ print <<EOM; <table> <tr><td> .. EOM &_List(''); print <<EOM; <tr><td> .. </table> EOM } sub _List2の内容を、CGIからhtmlを表示する際のスキン.htmlファイル内に下記のように記述した場合も 正常にリスト表示されます。 --スキン.html------ print <<"<!---HTML--->"; <HTML lang=ja > <HEAD>... <!---HTML---> $a1 = "./dir/data.dat"; $a2 = "./dir/data.dat"; $a3 = "./dir/data.dat"; &FileOpen('FILE1',"$a1"); &FileOpen('FILE2',"$a2"); &FileOpen('FILE3',"$a3"); @DATA = <FILE1>; push @DATA, <FILE2>,<FILE3>; close(FILE1); close(FILE2); close(FILE3); foreach (@DATA) { ($key,$val)=split(/=/,$_); print "$key=$val"; $StartNum++; } } print <<"<!---HTML--->"; ... </BODY></HTML> <!---HTML---> 1; ---

    • ベストアンサー
    • Perl

専門家に質問してみよう