アプリ版:「スタンプのみでお礼する」機能のリリースについて

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()によって所有者が変わってしまって
元の所有者に戻せなくて困っています。

A 回答 (3件)

大きなお世話かもしれませんが、 log200402.log のパーミッションは 606じゃありませんか?(^^;


後、最初からからのファイルとして、log200402.log をUPしているのでしょうか?
それとも、fopen($logfile ,"w+"); として、ファイルを作成しているのでしょうか?
後者であれば、httpdのユーザー(nobody ?)でファイルが作られますが…

この回答への補足

すみません。質問が間違っていました。
よく見ると、PHPで作成するファイルはfopen()でもtouch()でもcopy()でも、全て所有者がよく分からないものでした。

所有者変更のchown()も権限不足で使えませんでした。

新規ファイル作成の所有者に関する問題でまだ悩んでいます。
fopen()の所有者は何になるのか、指定はできるのかなどの
情報を探しています。

補足日時:2004/02/05 02:16
    • good
    • 0

> 所有者変更のchown()も権限不足で使えませんでした。


safe_mode = On になっているって事ですね。
これはどうしようもありません。
サーバー管理者に問い合わせれば、OKが出るかもしれませんが、ほぼないでしょう。

> fopen()の所有者は何になるのか、指定はできるのかなどの情報を探しています。
所有者に関しては、最初に空のファイルをUPロードしておけば、問題ないのではないですか?

この回答への補足

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

補足日時:2004/02/05 16:50
    • good
    • 0

えっと…まずはこのサーバーは、inamonsentoさんが、自分でいじれるのでしょうか?


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

もし、サーバーをいじれなければ、これは使えませんが…
と言うか空のファイルをUPしておく方が楽だと思うのですが…
何か不具合でもあるのでしょうか?
    • good
    • 1

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