PHPでファイルを書き出したいと思っていますが、fwrite関数で生成したファイルのパーミッションが自動的に644になってしまいます。そこでパーミッションを606に変更しようとしました。しかしchmod関数は権限が無いせいか、戻り値がfalseとなります(権限変更が出来ません)。これはphpの実行ユーザーと、ファイルの所有者そのものは違う為、644では権限が無いためだと思われます。そこで以下の4つのご質問があります。


・一般閲覧者がPHPファイルをリクエストした際に、PHPが処理される際の実行ユーザーは
  どこに記述された設定により、また誰に設定されているのでしょうか。

・生成時のパーミッションを含めて指定・作成する関数はありますか?

・生成時のファイルのマスク(022)は別に設定できますか?

・上記を実現する為の、他のアプローチはありますか?
 ちなみにダイナミックに生成されるため、ファイルの数、ファイルの名称が未確定です。
 従って予めファイルを作っておいてパーミッション設定をしておいて、更新させるという方法はできません。
 一般的なレンタルサーバーでの利用のためphp.iniをいじる事は出来ず、htaccessのみ許容されています。

回答の条件
  • 1人10回まで
  • 登録:2009/06/10 07:30:33
  • 終了:2009/06/11 18:16:56

回答(4件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/06/10 08:01:14

ポイント100pt

一般閲覧者がPHPファイルをリクエストした際に、PHPが処理される際の実行ユーザーは

どこに記述された設定により、また誰に設定されているのでしょうか。

通常、Webサーバを起動しているユーザー名(root, apacheなど)になります。


・生成時のパーミッションを含めて指定・作成する関数はありますか?

組み込み関数にはないと思います。

関数execでchmodコマンドを実行すれば変更できるかもしれませんが、ご質問の状況ですと、当該レンタルサーバはそういった関数の実行を許可していないように思います。


・生成時のファイルのマスク(022)は別に設定できますか?

組み込み関数ではできないと思います。


・上記を実現する為の、他のアプローチはありますか?

FTPアクセスは可能でしょうから、関数 ftp_chmod を試してみてください。処理に時間がかかるのは難点ですが。

id:happy1980

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

やはり別ユーザー(「apache」など)が実行するために、パーミッション変更権限が無いんでしょうね。apacheが実行しているにもかかわらず、生成されるファイルはまた別名のユーザー名(レンタルサーバーの場合はユーザーID)がオーナーになってしまうのが、パーミッション権限を変更できなくさせている要因のようです。

ftp_chmodについてありがとうございます。たしかに個別にFTP通信を開くというのは負荷がかかりそうですね。

2009/06/10 08:57:43
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/06/10 08:41:27

ポイント100pt

(0)

chmod("ファイル名", 0606)

失礼ながら 606 ではなく 0606 ですが間違いありませんでしょうか。

PHP: chmod - Manual


(1)一般閲覧者がPHPファイルをリクエストした際に、PHPが処理される際の

  実行ユーザーはどこに記述された設定により、また誰に設定されているのでしょうか。

Webサーバを実行するために用意された専用ユーザーが保有しています。


(2)生成時のパーミッションを含めて指定・作成する関数はありますか?

少なくともファイル操作関数内にはないと思います。

http://jp.php.net/manual/ja/ref.filesystem.php]


(3)生成時のファイルのマスク(022)は別に設定できますか?

マスクを変える方法はphpにも用意されています。

http://jp.php.net/manual/ja/function.umask.php]


(4)他のアプローチはありますか?

レンタルサーバ会社と契約コースを明示する事が出来れば

そのコースに合わせた回答が寄せられるかもしれません。

id:happy1980

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

0606で間違いありません。

上記のマスクを設定(060で)設定しておき、ファイル生成をすればパーミッション(606)でファイルを作成できますでしょうか。

サーバーはさくらインターネットhttp://www.sakura.ne.jp/のスタンダードプランです。共有・専用サーバープランではありません。

2009/06/10 08:50:48
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012009/06/10 10:01:51

ポイント100pt

SAKURA Internet : サポート/お問合せ : オンラインマニュアル

動作モード CGI
php.ini ファイルを直接設置/コントロールパネルから操作のいずれも可能
FTP関数 利用不可

マスクについては umask(0171) → 0606 や

umask(0111) → 0666 などが可能だと思いますが未確認です。


CGIモードなので実行ユーザーは所有者のはず。chmod の記述ミスは無いという事なので

ファイルを書き込むディレクトリのパーミッションをまずは確認してみてください。

id:happy1980

ありがとうございます。CGIモードというモードがあるという情報からあらたな糸口を見つけられそうです。CGIモードの場合、PHPファイルの所有者によって設定されるのですね。

2009/06/10 15:54:07
id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402009/06/10 13:21:46

ポイント100pt

一般閲覧者がPHPファイルをリクエストした際に、PHPが処理される際の実行ユーザーは

  どこに記述された設定により、また誰に設定されているのでしょうか

サーバー自体の設定で、管理者による。

大抵は apache の実行ユーザーか、レンタルサーバーのユーザーになる。


SAKURA Internet : サポート/お問合せ : オンラインマニュアル

apacheが実行しているにもかかわらず、生成されるファイルはまた別名のユーザー名(レンタルサーバーの場合はユーザーID)

ってことであれば、ユーザーの権限で CGI 実行されているんだろう。


あと勘違いしているようだが、ファイルの生成と権限の変更は親ディレクトリの権限に依存する。

手っ取り早くやるには FTP 等で親ディレクトリの権限を 777 にしてしまえばいい。

それで動けばその後に適切な権限に変更していけばいいかと。

id:happy1980

親ディレクトリに依存するんですね。この事も知りませんでした。ありがとうございます。

CGIモードというモードを意識しつつ、ローカルサーバーとレンタルサーバーの動作を確認して、パーミッションの変更についていろいろ試してみます。

2009/06/10 16:05:57

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません