web-dev-qa-db-ja.com

なぜPHP 777権限でディレクトリを作成できないのですか?

PHPコマンドを使用して、サーバー上にディレクトリを作成しようとしています:

mkdir("test", 0777);

ただし、完全な権限は付与されず、以下のみが付与されます。

rwxr-xr-x
54
Sjwdavies

モードは、現在の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を元の状態に復元します。

詳細については、PHP doco for mask および mkdir を参照してください。

135
paxdiablo

ファイルとディレクトリの作成は、umaskの設定の影響を受けます。次のようにumaskを操作することにより、特定の許可セットを持つファイルを作成できます。

$old = umask(0);
mkdir("test", 0777);
umask($old);
13
Steve Weet

マルチスレッドWebサーバーでこの関数を使用しないでください。ファイルを作成した後、chmod()でファイルのパーミッションを変更することをお勧めします。

例:

$dir = "test";
$permit = 0777;

mkdir($dir);
chmod($dir, $permit);
5

おそらく、 mask はそれらを除外するように設定されています

2

試した人のために

mkdir('path', 777);

そして、それは機能しませんでした。

これは、明らかに、ファイルモードに先行する0が非常に重要であり、chmodに渡された数値を10進数ではなく8進数として解釈するように指示するためです。

参照

追伸これは質問に対する解決策ではなく、承認されたanwserへのアドオンにすぎません

1
Niket Pathak