63

PHPで使用する目的は何umask(0);ですか?

私はこれを数回見たことがありますが、ドキュメントから正確に何をするのかわかりません。

誰かがこれを説明できますか?いつ使用すると便利ですか?

4

2 に答える 2

56

umask0000(または単に) に設定0すると、新しく作成されたファイルまたは作成されたディレクトリには、最初に取り消された権限がないことを意味します。言い換えると、aumaskがゼロの場合、すべてのファイルが、0666または誰でも書き込み可能として作成されます。の間に作成されたディレクトリumask0になります0777

通常は、新しく作成されたファイルまたはディレクトリに必要なパーミッションを誰でも書き込み可能なもの以外に明示的に設定するために、 をumask(0)直接呼び出す必要があります。chmod()

umask をゼロに設定するときは注意してください。 これは危険であり、作成されたファイルを変更できる必要がある「実際の」ユーザーとは異なるユーザーとして Web サーバーが実行されている場合、後で Web サーバーによって書き込まれる必要があるファイルを作成する場合にのみ役立ちます。ウェブサーバーによって。0022それ以外の場合、システムのデフォルトの umask は、ファイルの所有者は書き込み可能ですが、他のユーザーは書き込みできないようなものになる可能性があります。その場合、通常のユーザー アカウントでマシンにログインすると、PHP の Web サーバーによって作成されたファイルに書き込むことができなくなります。

一般に、誰でも書き込み可能なファイルを作成するよりも、Web サーバーが書き込むディレクトリをより明示的に管理することをお勧めします。ディレクトリ内に作成されたファイルに特定のグループ権限が必要な場合は、ディレクトリに sgid ビットを設定して、そのディレクトリ内の新しいファイルがグループの所有権を継承するようにすることをお勧めします。ファイルへのアクセスが必要なユーザーは、ファイルへのアクセス権を持つグループのメンバーである必要があります。これは、誰でも読み取り可能で誰でも書き込み可能なファイルを作成するよりもはるかに安全です。

php > umask(0);
// Should get created as 666
php > touch('file1.txt');

// "2" perms revoked from group, others, gets created as 644
php > umask(022);
php > touch('file2.txt');

// All revoked (2,4) from group, others, gets created as 600
php > umask(066);
php > touch('file3.txt');

-rw-rw-rw-   1 me  group     0 Aug 24 15:34 file1.txt
-rw-r--r--   1 me  group     0 Aug 24 15:35 file2.txt
-rw-------   1 me  group     0 Aug 24 15:37 file3.txt
于 2012-08-24T20:33:54.313 に答える
5

umask は、基本的にファイルを作成するためのデフォルト設定です。本質的には、デフォルトの chmod をオンにしてからファイルを書き込む方が、ファイルを書き込んでから chmod するよりも安全です (一部の人は言います)。結局のところ、ファイルの書き込みが終了してから chmod を実行するまでの時間はせいぜいミリ秒なので、これについては懐疑的です。

umask() sets PHP's umask to mask & 0777 and returns the old umask

基本的に、LinuxなどのOSに入力したものにデフォルトの書き込み許可を設定し、古いものを返すので、元に戻すことができます。これは、PHP プロセス自体に適用されます。

ドキュメントページのコメント: http://php.net/manual/en/function.umask.phpは、例によって明確になります。

于 2012-08-24T20:33:08.747 に答える