PHP mkdir()書き込み権限がない問題解決方法


mkdirを使ってフォルダを作成すると、この関数には二つのパラメータがあり、二つ目のパラメータは新しく作成したフォルダのための権限を指定します。
ただし、直接mkdir('ファイルアドレス',077);新しいフォルダの権限は777ではないことが分かりました。普通は022です。
mkdirは、フォルダに権限を設定すると、現在ログインしているオペレーティングシステムのユーザのumask(ユーザデフォルトの権限属性)の値とビット“和”を行うので、得られた値が最終権限値です。
umaskは何ですか?
私たちが作成したファイルのデフォルトのパーミッションはどうなりますか?このデフォルトの権限はどのように変更されますか?
システムにログインしてからファイルを作成するといつもデフォルトの権限があります。この権限はどうやって来ますか?これはumaskのしわざです。
umaskはユーザーがファイルを作成するデフォルトの権限を設定しています。chmodの効果とは正反対で、umaskは「補数コード」を設定しています。chmodはファイルの権限コードを設定しています。普通は/etc/profile、$HOME/bash_profileまたは$HOME/profileにumask値を設定します。
どうやってm ask値を計算しますか?
umaskコマンドは、ファイル作成時のデフォルトモードを設定することができます。各クラスのユーザ(ファイルの持ち主、グループのユーザ、その他のユーザ)に対応して、対応するumask値の中の数字が存在します。ファイルにとって、この数字の最大値はそれぞれ6です。システムはテキストファイルを作成する時に実行権限を与えてはいけません。作成後にchmodコマンドでこの権限を追加しなければなりません。ディレクトリは実行権限の設定を許可します。このようにして、カタログに対しては、各数字は最大7から7まで可能です。
このコマンドの一般的な形式は、umask nnnであり、nnは000−777でありうる。
私たちはumaskが権限の中から相応の席を取ったということを覚えておけばいいです。
例えば、umask値が022であれば、デフォルトのディレクトリ権限は755であり、デフォルトのファイル権限は644である。
したがって、ユーザーのumaskが022(一般的にはデフォルトはこれ)である場合、000 010はmkdirによって指定された777にあり、すなわち111ビットの「和」の後に得られた真の権限は022である。
新しいフォルダの権限を最大にしたいなら、2つの方法があります。
1、ユーザーのumaskを修正し、phpはumask関数を提供します。

$oldumask=umask(0);
mkdir('test',0777);
umask($oldumask);
この方法は一苦労に見えますが、シナリオの先頭ファイルにumask値を指定して、後ろに直接mkdirを使って権限を制御できます。注意したいのは、マルチスレッドサーバでumask関数を使うと、複数のスレッドが一つのumaskを共用するため、混乱する恐れがあります。
2、chmod関数を使うことも一番よく使われている方法です。

mkdir(' ', 0777);
chmod(' ', 0777);
最後に、権限値は8進数表記、すなわち「0」の先頭であり、必ず引用符を付けないように注意してください。