• ベストアンサー

ファイルのアップロードに関して

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 です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • m-kur
  • ベストアンサー率50% (22/44)
回答No.1

直接的な解決方法ではないのですが、「困り度3で直ぐに解凍が欲しい」とされているので一時的な方法として。 move_uploaded_fileで簡単に実装できたのでしたら、root権限でcronを走らせて、ユーザのディレクトリにあるファイルの所有権はすべてユーザのものにしてしまう、なんてのはどうでしょうか。 根本的な解決になってなくてごめんなさい。

kazu28
質問者

お礼

解答ありがとうございます。 とても、参考になりました。 とりあえず、m-kurさんの方法で、対処しようとおもいます。 他の方法があるかもしれないので、もうしばらく締め切らないでおきます。

その他の回答 (1)

  • sisya
  • ベストアンサー率39% (97/244)
回答No.2

PHP上から直接システムコマンドで権限を変更してしまうのが理想ですが、 スクリプトがapacheの権限で動いているので変更不可能 と言う点が問題なんですよね… 私の体験談ですが、 権限を変更するsystem命令を記述した PHPもしくはPerlスクリプトを作り ファイルの権限をrootにしてCGIで実行させました。 (例:system("chown $user $filename");)

kazu28
質問者

お礼

レス遅れて申し訳ありません。 早速、教えていただいた方法を試して見たのですが、思ったようにはいきません。 > 権限を変更するsystem命令を記述した > PHPもしくはPerlスクリプトを作り > ファイルの権限をrootにしてCGIで実行させました。 > (例:system("chown $user $filename");) これは、権限を変更するスクリプトファイルのオーナーをrootにするということでいいんですよね? グル-プも含めて変更しましたが、実行しても変更したいファイルのオーナは変更されませんでした。 その際、エラーも出てきませんでした。 他に、何か設定が必要なのでしょうか? よろしくお願いいたします。

関連するQ&A