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

phpでファイルのアップロードをするプログラムを作成しています。
当初 move_uploaded_file を使い意外と簡単に作れたのですが、ファイルの所有者がApacheになってしまいます。

何故、ファイルの所有者が Apache でまずいのかというと、ユーザーの使用域を quota で制限しているのですが、所有者がApacheになっていると、制限ができません。
(ユーザーのエリアにアップロードしても、ユーザーが Apache になっていると、使用済み容量が増えません。)

そこで、アップロード後 chown で所有者を変更しようと思いましたが、ルート権限でないと変更できないようで、うまく行きませんでした。

マニュアルを見ていると ftp_connect で接続し ftp_login でログインしてから ftp_put で転送してやれば所有者をログイン時のユーザーにできそうと思い作成したのですが、
<FORM method="post" action="hoge.php" enctype="multipart/form-data">
:
:
<input name="userfile" size="60" type="file">
では、hoge.phpに転送元のファイル名がうまく引き渡されません。

よい知恵はないでしょうか。


尚、サーバー側の環境は
Fedora 1
Apache/2.0.48
PHP Version 4.3.4
です。

よろしくお願いいたします。

A 回答 (2件)

直接的な解決方法ではないのですが、「困り度3で直ぐに解凍が欲しい」とされているので一時的な方法として。



move_uploaded_fileで簡単に実装できたのでしたら、root権限でcronを走らせて、ユーザのディレクトリにあるファイルの所有権はすべてユーザのものにしてしまう、なんてのはどうでしょうか。

根本的な解決になってなくてごめんなさい。
    • good
    • 0
この回答へのお礼

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

とても、参考になりました。
とりあえず、m-kurさんの方法で、対処しようとおもいます。

他の方法があるかもしれないので、もうしばらく締め切らないでおきます。

お礼日時:2004/04/10 14:39

PHP上から直接システムコマンドで権限を変更してしまうのが理想ですが、


スクリプトがapacheの権限で動いているので変更不可能
と言う点が問題なんですよね…

私の体験談ですが、
権限を変更するsystem命令を記述した
PHPもしくはPerlスクリプトを作り
ファイルの権限をrootにしてCGIで実行させました。
(例:system("chown $user $filename");)
    • good
    • 0
この回答へのお礼

レス遅れて申し訳ありません。

早速、教えていただいた方法を試して見たのですが、思ったようにはいきません。

> 権限を変更するsystem命令を記述した
> PHPもしくはPerlスクリプトを作り
> ファイルの権限をrootにしてCGIで実行させました。
> (例:system("chown $user $filename");)

これは、権限を変更するスクリプトファイルのオーナーをrootにするということでいいんですよね?
グル-プも含めて変更しましたが、実行しても変更したいファイルのオーナは変更されませんでした。
その際、エラーも出てきませんでした。

他に、何か設定が必要なのでしょうか?
よろしくお願いいたします。

お礼日時:2004/04/17 11:52

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