- 締切済み
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()によって所有者が変わってしまって 元の所有者に戻せなくて困っています。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kusukusu
- ベストアンサー率38% (141/363)
えっと…まずはこのサーバーは、inamonsentoさんが、自分でいじれるのでしょうか? Linux+Apahceと仮定して説明すると、何もしなければ、httpdユーザーはnobodyです。 ゆえに新規に作成されたファイルの所有者はnobodyになります。 chmodコマンドは、当然nobodyの権限では利用できません。 これをnobodyの権限で利用したければ、少々危険ではありますが、sudoを使ってnobodyに権限を与えてやればいいです。 visudoでファイルを開き nobody ALL = NOPASSWD: /usr/bin/chmod を追加してやります。 sudoの使い方などはマニュアルを参照してください。 もし、サーバーをいじれなければ、これは使えませんが… と言うか空のファイルをUPしておく方が楽だと思うのですが… 何か不具合でもあるのでしょうか?
- kusukusu
- ベストアンサー率38% (141/363)
> 所有者変更のchown()も権限不足で使えませんでした。 safe_mode = On になっているって事ですね。 これはどうしようもありません。 サーバー管理者に問い合わせれば、OKが出るかもしれませんが、ほぼないでしょう。 > fopen()の所有者は何になるのか、指定はできるのかなどの情報を探しています。 所有者に関しては、最初に空のファイルをUPロードしておけば、問題ないのではないですか?
- kusukusu
- ベストアンサー率38% (141/363)
大きなお世話かもしれませんが、 log200402.log のパーミッションは 606じゃありませんか?(^^; 後、最初からからのファイルとして、log200402.log をUPしているのでしょうか? それとも、fopen($logfile ,"w+"); として、ファイルを作成しているのでしょうか? 後者であれば、httpdのユーザー(nobody ?)でファイルが作られますが…
補足
すみません。質問が間違っていました。 よく見ると、PHPで作成するファイルはfopen()でもtouch()でもcopy()でも、全て所有者がよく分からないものでした。 所有者変更のchown()も権限不足で使えませんでした。 新規ファイル作成の所有者に関する問題でまだ悩んでいます。 fopen()の所有者は何になるのか、指定はできるのかなどの 情報を探しています。
補足
safe_mode = offです。 既存ファイルなら所有者を保ったまま追記できる環境です。