mkdirを使用してフォルダーを作成する場合、この関数には2つのパラメーターがあることがわかりました。2番目のパラメーターは、新しく作成されたフォルダーのアクセス許可を指定することです。 しかし、 mkdir('file address', 0777); を直接使用すると、新しいフォルダーのアクセス許可が 777 ではなく、通常は 022 であることがわかります。 なぜなら、mkdir がフォルダーのアクセス許可を設定するとき、オペレーティング システムに現在ログインしているユーザーの umask (ユーザーのデフォルトのアクセス許可属性) 値とのビット "AND" が実行され、その結果の値が最終的なアクセス許可の値になるからです。
umaskそれは何ですか?
ファイルを作成するためのデフォルトの権限を取得するにはどうすればよいですか?このデフォルトの権限を変更するにはどうすればよいですか?
システムにログインしてファイルを作成すると、常にデフォルトの権限が与えられます。では、この権限はどこから来るのでしょうか?これが umask の機能です。
umask は、ユーザーが作成したファイルのデフォルトのアクセス許可を設定します。これは、chmod がアクセス許可の「補完コード」を設定するのに対し、chmod はファイルのアクセス許可コードを設定します。通常、umask 値は /etc/profile、$HOME/.bash_profile または $HOME/.profile に設定されます。
umask値を計算するにはどうすればよいですか?
umask コマンドを使用すると、ファイルの作成時にデフォルト モードを設定できます。ユーザーの種類 (ファイル所有者、同じグループ内のユーザー、他のユーザー) ごとに umask 値に対応する番号があります。ファイルの場合、この数値の最大値は 6 です。システムでは、テキスト ファイルの作成時に実行権限を与えることはできません。作成後に chmod コマンドを使用して、この権限を増やす必要があります。ディレクトリでは実行権限を設定できるため、ディレクトリの場合、umask の最大数は 7 までです。
このコマンドの一般的な形式は umask nnn です。nnn は 000 ~ 777 です。
umask はアクセス許可から対応するビットを「取り除く」ということだけを覚えておく必要があります。
例: umask 値が 022 の場合、デフォルトのディレクトリ権限は 755、デフォルトのファイル権限は 644 です。
つまり、ユーザー umask が 022 (通常、これがデフォルト) である場合、つまり、000 010 010 は mkdir で指定された 777 に等しい、つまり 111 111 111 となります。「AND」の後、取得される実際の権限は次のようになります。 022.
新しいフォルダーの権限を最大化したい場合、それを達成する 2 つの方法があります: (もちろん、現在のユーザーが最高の権限を付与できるという条件の下で)
1. PHP が提供するユーザー umask を変更します。 umask 関数:
コードは次のとおりです:
$oldumask=umask(0); mkdir('test',0777); umask($oldumask);
この方法は、スクリプトの開始ファイルで umask 値を指定し、mkdir を直接使用して権限を制御するようです。マルチスレッドサーバーで umask 関数を使用する場合、多くの 2 つのスレッドが umask を共有するため、混乱が生じる可能性があることに注意してください。
2. 最も一般的に使用される方法でもある chmod 関数を使用します。
code コードは次のとおりです:
mkdir('文件地址', 0777); chmod('文件地址', 0777);
最後に、アクセス許可の値は 8 進数で表現するのが最適であることに注意してください。 「0」で始まり、引用符を追加しないでください。
以上がphp mkdir()関数に書き込み権限がない問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。