LinuxおよびUnixのようなシステムでは、ファイルとディレクトリの許可は3桁のオクタル数( 0755、0644など)で表されます。これらの許可値は、ファイル所有者、所属するユーザーグループ、および他のユーザーの読み取り、書き込み、および実行許可を制御します。 PHPでは、 Chmod()関数を使用すると、ファイルまたはディレクトリの権限をプログラム的に変更できます。この記事では、Chmod()関数を正しく使用する方法を説明し、Octal Permission Valuesを処理する方法に焦点を当てます。
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">chmod</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$permissions</span></span><span> )
</span></span>
$ filename :ファイルまたはディレクトリへのパスは、許可を変更するものです。
$許可:Octalで表される許可値( 0755など)。
この関数はブール値を返し、成功のために真であることを返し、障害のためにfalseを返します。
オクタル許可値は通常、3桁または4桁の数として記述され、最初の3桁は以下に対応しています。
1位:ファイル所有者の権限
2番目:ユーザーグループへの権限
3位:他のユーザーの権限
各ビットの許可値は次のとおりです。
4 = Read(R)
2 =書き込み(w)
1 =実行(x)
これらの値は重ねることができます。例えば:
7 = 4 + 2 + 1 =読み取り、書き込み、実行
6 = 4 + 2 =読み取り、書き込み
5 = 4 + 1 =読み取り、実行
0755手段:所有者は実行の読み取りと書き込みを行うことができ、グループユーザーや他のユーザーは実行を読み取ることができます。
0644手段:所有者は読み書きができ、グループユーザーや他のユーザーのグループは読み取ることができます。
注: PHPの許可値は、OCTALを表すために0から開始する必要があります。そうしないと、10進数として解釈され、結果が誤っています。
<span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>); </span><span><span class="hljs-comment">// 正しい,0755 それはオクタルです</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-number">755</span></span><span>); </span><span><span class="hljs-comment">// 間違い,755 小数として扱われます</span></span><span>
</span></span>
一般的な許可設定の例は次のとおりです。
<span><span><span class="hljs-comment">// 誰もが読みやすく、書き込み可能になるように設定されています</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'script.sh'</span></span><span>, </span><span><span class="hljs-number">0777</span></span><span>);
</span><span><span class="hljs-comment">// 所有者に読み書きに設定します,他の人は読むだけです</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'config.ini'</span></span><span>, </span><span><span class="hljs-number">0644</span></span><span>);
</span><span><span class="hljs-comment">// 所有者に読み書きに設定します执行,グループユーザーと他のユーザーは、実行のみを読み取ります</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'public/index.php'</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>);
</span></span>
FilePerms()関数を使用して現在のファイル権限を取得し、 DECOCT()を使用してOctal形式に変換することもできます。
<span><span><span class="hljs-variable">$perms</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fileperms</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">decoct</span></span><span>(</span><span><span class="hljs-variable">$perms</span></span><span>), -</span><span><span class="hljs-number">4</span></span><span>); </span><span><span class="hljs-comment">// アクセス許可を出力した後4ビットオクタル</span></span><span>
</span></span>
これは、許可設定が有効であることをデバッグして検証するのに非常に役立ちます。
PHPスクリプトには、ターゲットファイルの許可を変更する許可が必要です。それ以外の場合は、chmod()が失敗します。
一部のシステムでは、ディレクトリのアクセス許可もファイルアクセスに影響を与える可能性があります。
一時的なファイルまたはデバッグフェーズでない限り、 0777アクセス許可を使用しないでください。生産環境では、ファイルがすべてのユーザーに書き込み許可を開くようにしないようにしてください。
PHPでのChmod()関数の使用、特にOctal Permission Valuesの処理を習得することは、サーバーファイルの許可を管理し、安全なWebアプリケーションを構築するために重要です。ほとんどのファイルアクセスとセキュリティの問題は、Octal形式を念頭に置き、権限を正しく割り当てることで回避できます。