アップロードして保存したファイルがなぜか 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);
}
通常はPHPからファイルを保存するとftp権限と同じになると思うのですが
いいえ。通常、PHPを動かしている Apache がオーナー(所有者)になります。
オーナーを変更するには chown 関数を用います。
ただし、レンタルサーバをご利用の場合は、この関数が利用できないこともあります。その際は、レンタルサーバの管理者にご相談ください。場合によっては、オーナーを Apache からユーザーに変更してくれるかもしれません。
昔自分が作ったプログラムのログなどを見てみると、確かにapache権限になっていました。権限を606から644に変更したところftpソフトでも削除できるようになりました。
それで削除するプログラムをもう一度よく確かめてみたところ、
unlink( $file );
exec('rm '.$file);
どちらを使っても削除できなかったのですが、$fileに渡しているパスが絶対パス(http://~)だったためでした。相対パス(/www/host/~)にしたら削除できました。
どうもありがとうございました!