PHPコマンドを使用して、サーバー上にディレクトリを作成しようとしています:
mkdir("test", 0777);
ただし、完全な権限は付与されず、以下のみが付与されます。
rwxr-xr-x
モードは、現在のumask
(この場合は022
)によって変更されます。
umask
の仕組みは減法です。 mkdir
に与えられた初期許可を取得し、umask
を減算してactual許可を取得します。
0777
- 0022
======
0755 = rwxr-xr-x.
これを行わない場合は、umask
を一時的にゼロに設定して、効果がないようにする必要があります。これを行うには、次のスニペットを使用します。
$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
最初の行はumask
をゼロに変更し、前の行を$oldmask
に保存します。 2行目は、目的のアクセス許可と(現在は無関係)umask
を使用してディレクトリを作成します。 3行目は、umask
を元の状態に復元します。
ファイルとディレクトリの作成は、umaskの設定の影響を受けます。次のようにumaskを操作することにより、特定の許可セットを持つファイルを作成できます。
$old = umask(0);
mkdir("test", 0777);
umask($old);
マルチスレッドWebサーバーでこの関数を使用しないでください。ファイルを作成した後、chmod()でファイルのパーミッションを変更することをお勧めします。
例:
$dir = "test";
$permit = 0777;
mkdir($dir);
chmod($dir, $permit);
おそらく、 mask はそれらを除外するように設定されています
試した人のために
mkdir('path', 777);
そして、それは機能しませんでした。
これは、明らかに、ファイルモードに先行する0が非常に重要であり、chmodに渡された数値を10進数ではなく8進数として解釈するように指示するためです。
追伸これは質問に対する解決策ではなく、承認されたanwserへのアドオンにすぎません