• 締切済み

chmod()で所有者が変わってしまう

Perlでは新規ファイルを作成してchmod()で属性を変更しても所有者は変わりませんでした。 FFFTPでは、 □/public_html/testdir 名前      属性   所有者 logwrite.cgi  705   1234 log200402.log  700   1234 となるのですが、PHPではFFFTPが、 □/public_html/testdir 名前      属性   所有者 logwrite.php  705   1234 log200402.log  700   99 のように、所有者が変わってしまうのです。 PerlからPHPの移植がうまくいっていないのです。 logwrite.phpのその処理の部分は $fp = fopen($logfile, "w"); fwrite($fp, $logdata); fclose($fp); chmod($logfile, 0700); です。このあとPHPで所有者を99から1234に変更できれば よいのですが、方法が分かりません。 そうでなくとも、所有者が1234のままで chmod($logfile, 0700);が完了できれば問題ありません。 Perlではchmod()で所有者が変わらなかったのに、 PHPではchmod()によって所有者が変わってしまって 元の所有者に戻せなくて困っています。

みんなの回答

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

えっと…まずはこのサーバーは、inamonsentoさんが、自分でいじれるのでしょうか? Linux+Apahceと仮定して説明すると、何もしなければ、httpdユーザーはnobodyです。 ゆえに新規に作成されたファイルの所有者はnobodyになります。 chmodコマンドは、当然nobodyの権限では利用できません。 これをnobodyの権限で利用したければ、少々危険ではありますが、sudoを使ってnobodyに権限を与えてやればいいです。 visudoでファイルを開き nobody ALL = NOPASSWD: /usr/bin/chmod を追加してやります。 sudoの使い方などはマニュアルを参照してください。 もし、サーバーをいじれなければ、これは使えませんが… と言うか空のファイルをUPしておく方が楽だと思うのですが… 何か不具合でもあるのでしょうか?

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

> 所有者変更のchown()も権限不足で使えませんでした。 safe_mode = On になっているって事ですね。 これはどうしようもありません。 サーバー管理者に問い合わせれば、OKが出るかもしれませんが、ほぼないでしょう。 > fopen()の所有者は何になるのか、指定はできるのかなどの情報を探しています。 所有者に関しては、最初に空のファイルをUPロードしておけば、問題ないのではないですか?

inamonsento
質問者

補足

safe_mode = offです。 既存ファイルなら所有者を保ったまま追記できる環境です。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

大きなお世話かもしれませんが、 log200402.log のパーミッションは 606じゃありませんか?(^^; 後、最初からからのファイルとして、log200402.log をUPしているのでしょうか? それとも、fopen($logfile ,"w+"); として、ファイルを作成しているのでしょうか? 後者であれば、httpdのユーザー(nobody ?)でファイルが作られますが…

inamonsento
質問者

補足

すみません。質問が間違っていました。 よく見ると、PHPで作成するファイルはfopen()でもtouch()でもcopy()でも、全て所有者がよく分からないものでした。 所有者変更のchown()も権限不足で使えませんでした。 新規ファイル作成の所有者に関する問題でまだ悩んでいます。 fopen()の所有者は何になるのか、指定はできるのかなどの 情報を探しています。