PHPのアップロードで困っています。


アップロードして保存したファイルがなぜか apache権限になってしまい、
いちいちSSHを使わないと消せません。

FancyUpload というアップロードスクリプトを使っています。
http://digitarald.de/project/fancyupload/

FlashとJavascript、PHPを併用したアップロードスクリプトです。

通常はPHPからファイルを保存するとftp権限と同じになると思うのですが
FlashやJavascriptなどのクライアントサイドのスクリプトからPHPを動かすと
apache権限になってしまうことがあるのでしょうか?

また、これを回避する方法はありますか?


ちなみに、PHPはカスタマイズして保存できるようにしてあります。
// ファイルを移動
$senddir = IMG_FILE_DIR . $goods_admin_id . "/";
if( !is_readable($senddir) ) mkdir( $senddir, 0707 );
$sendpath = $senddir . $_FILES['photoupload']['name'];
if( move_uploaded_file($file, $sendpath)){
chmod($sendpath,0606);
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/10/02 21:39:40
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント60pt

通常はPHPからファイルを保存するとftp権限と同じになると思うのですが

いいえ。通常、PHPを動かしている Apache がオーナー(所有者)になります。

オーナーを変更するには chown 関数を用います。


ただし、レンタルサーバをご利用の場合は、この関数が利用できないこともあります。その際は、レンタルサーバの管理者にご相談ください。場合によっては、オーナーを Apache からユーザーに変更してくれるかもしれません。

id:shotets

昔自分が作ったプログラムのログなどを見てみると、確かにapache権限になっていました。権限を606から644に変更したところftpソフトでも削除できるようになりました。

それで削除するプログラムをもう一度よく確かめてみたところ、

unlink( $file );

exec('rm '.$file);

どちらを使っても削除できなかったのですが、$fileに渡しているパスが絶対パス(http://~)だったためでした。相対パス(/www/host/~)にしたら削除できました。


どうもありがとうございました!

2008/10/02 21:39:04
  • id:standard_one
    ブラウザから動かせばWebサーバーの持ち物になるのであっていると思いますよ?
  • id:shotets
    あっているというのはどこについてでしょうか?
  • id:shotets
    あ、ブラウザ経由だとapache権限になるということですね。

    だとしたらこのスクリプト使っていると全てそうなってしまいますね。


    アップロードの権限はapacheから変えられないとしたら
    apache権限で削除する方法はありますか?


    同じようにflash経由でphpを起動すればいいのですかね?
  • id:shotets
    削除プログラムは現在javascript経由で動かしている(Ajax)ので
    javascriptからはNGってことですよね?
  • id:shotets
    (/www/host/~)これって絶対パスでしたね。失礼。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません