人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

●質問者: happy1980
●カテゴリ:ウェブ制作
✍キーワード:PHP アプローチ パーミッション ファイル マスク
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● pahoo
●100ポイント

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

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

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


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

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

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


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

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


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

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

◎質問者からの返答

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

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

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


2 ● kn1967
●100ポイント

(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)他のアプローチはありますか?

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

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

◎質問者からの返答

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

0606で間違いありません。

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

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


3 ● kn1967
●100ポイント

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

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

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

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


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

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

◎質問者からの返答

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


4 ● b-wind
●100ポイント

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

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

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

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


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

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

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


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

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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ