2

PHPのmkdir関数には次のシグネチャがあります。

bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )

$pathname$recursiveを指定してこの関数を呼び出したいのですが、パラメータtrueを指定したくありません。$modeサーバーレベルで新しいファイル/ディレクトリのアクセス許可を制御しているため、コードでそれらを指定したくありません。

$modeでは、事実上無視され、chmodが行われないようにするには、何を渡す必要がありますか?方法が見つかりません。

たぶん唯一の解決策はmkdir、パスを壊してディレクトリを1つずつ作成するカスタム関数を作成することですか?

4

4 に答える 4

3

モードをデフォルト値0777に設定してみませんか。

于 2010-07-22T09:28:02.337 に答える
1

申し訳ありませんが、$ recursive paramを指定する場合、$modeparamをエスケープする方法はありません。

モードを変数に保存して、後でどこでも使用できます-

$mode = 0777;

mkdir($file_name, $mode, $recursive);
于 2010-07-22T09:29:29.403 に答える
1

0777

何かが足りない場合を除いて、署名には3つのオプションのパラメーターが表示されます。最初の2つは、指定されていない場合$mode、それぞれ$recursiveデフォルト値0777と、になりfalseます。明示的に指定しても、動作は変わりません。

于 2010-07-22T09:33:53.840 に答える
1

0777デフォルトです。パラメータを指定しない場合は、0777代わりにが使用されるため、パラメータを指定して「回避」しようとする試みは無効です。

これはPHPによる動作ではないため、これを回避できるとは思いません。GNU/Linuxmkdir()も同じことを行います。

パラメータmodeは、使用する権限を指定します。これは、通常の方法でプロセスのumaskによって変更されます。作成されたディレクトリのパーミッションは(mode&〜umask&0777)です。

これがあなたが心配する必要があるものであるかどうかはわかりません。もしそうなら、あなたができる最善のことは、親ディレクトリの権限をチェックしてそれを適用することだと思います。

于 2010-07-22T09:34:15.587 に答える