PHPはファイルのパーミッション情報を取得します(パーミッション情報の取得、返される文字列の意味、バイナリ変換方法、パーミッションの変更)

説明する

ここに画像の説明を挿入
(写真はネットから拾ってきました)

ファイル権限とは、ユーザーおよび他のプロセスに対するファイルまたはディレクトリのアクセス権限を指します。Unix および Linux システムでは、ファイルとディレクトリには読み取り、書き込み、実行という 3 つの権限があります。これら 3 つの権限は、それぞれ 1、2、4 という番号で示されます。
たとえば、ファイル file.txt には次の権限がある可能性があります。

-rwxr-xr-x 1 user group other

このうち、rwx はユーザーがファイルの読み取り、書き込み、実行ができることを示し、rx はユーザーがファイルの読み取りと実行ができることを示し、r-- はユーザーがファイルの読み取りのみできることを示し、-x はユーザーが実行できないことを示します。ファイル。
ファイルのアクセス許可は通常、644 などの 8 進数で表されます。これは、ファイルがユーザーおよび他のプロセスに対して読み取り、書き込み、および実行のアクセス許可を持っていることを意味します。Windows システムでは、ファイルのアクセス許可は通常、0644 などの 16 進数で表されます。
権限の設定では、通常、次の側面を考慮する必要があります。
ユーザー: ファイルまたはディレクトリにアクセスできるのは誰ですか?
グループ: どのユーザー グループがファイルまたはディレクトリにアクセスできますか?
その他: 他のプロセスによるファイルまたはディレクトリへのアクセスを制御するにはどうすればよいですか?
ファイルのアクセス許可を設定すると、ファイルとディレクトリのセキュリティを保護し、ファイルの使用方法を制御することもできます。

1. ファイルの権限情報を取得する

PHP でファイルのアクセス許可情報を取得するfileperms()関数。この関数は、ファイル名またはファイル ハンドルをパラメータとして受け取ることができ、現在のファイル権限を表す 8 進数値を返します。8 進数を使用して対応するアクセス許可フラグを比較し、ファイルの読み取りおよび書き込みアクセス許可を決定できます。サンプルコードは次のとおりです。

function getFilePermission($filename) {
    
    
    clearstatcache(true, $filename);
    $perms = fileperms($filename);
    if (($perms & 0xC000) === 0xC000) {
    
    
        $info = 's';
    } elseif (($perms & 0xA000) === 0xA000) {
    
    
        $info = 'l';
    } elseif (($perms & 0x8000) === 0x8000) {
    
    
        $info = '-';
    } elseif (($perms & 0x6000) === 0x6000) {
    
    
        $info = 'b';
    } elseif (($perms & 0x4000) === 0x4000) {
    
    
        $info = 'd';
    } elseif (($perms & 0x2000) === 0x2000) {
    
    
        $info = 'c';
    } elseif (($perms & 0x1000) === 0x1000) {
    
    
        $info = 'p';
    } else {
    
    
        $info = 'u';
    }

    $info .= (($perms & 0x0100) ? 'r' : '-');
    $info .= (($perms & 0x0080) ? 'w' : '-');
    $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));
    $info .= (($perms & 0x0020) ? 'r' : '-');
    $info .= (($perms & 0x0010) ? 'w' : '-');
    $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));
    $info .= (($perms & 0x0004) ? 'r' : '-');
    $info .= (($perms & 0x0002) ? 'w' : '-');
    $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));

    return $info;
}

// 使用示例
echo getFilePermission('example.txt'); // 返回 "-rw-rw-r--"

この関数は、ファイル権限設定に従ってファイル権限を表す文字列を返します。このうち、最初の文字はファイルの種類を表し、次の 9 文字はファイル所有者、グループなどの読み取りおよび書き込み権限を表します。「r」は読み取り専用権限、「w」は書き込み可能権限、「x」は書き込み権限を意味します。 「-」は実行許可を意味し、「-」は許可なしを意味し、これらの文字の組み合わせを使用してファイルのすべての許可情報を表すことができます。

2. ファイル許可文字の解釈を返します。

戻り結果: -rwxr-xr-x

-rwxr-xr-x、Linux システムでは、権限はユーザー、つまりユーザー、グループ ユーザー、その他のユーザーによって区別されます。最初の数字はファイルの種類を示し、- はファイルを表し、d はディレクトリを表します。他の各ユーザーは 3 文字を占めます。ここで、-rwxr-xr-x は次の関係に対応します。

最初の1つ ユーザー グループユーザー 他のユーザー
- rwx 処方箋 処方箋

これは、ファイルまたはディレクトリのアクセス許可を左から右に表現したもので、合計 10 文字で構成されます。

  • 最初の文字はファイルの種類を示します (- は通常のファイル、d はディレクトリ、l はシンボリック リンク ファイルなどを示します)。
  • 次の 3 文字はファイル所有者の権限を示し、r は読み取り権限、w は書き込み権限、x は実行権限を意味します。権限がない場合は - を使用して示します。
  • 次の 3 文字はファイル所有者のグループの権限を示し、形式は以前と同じです。
  • 最後の 3 文字は他のユーザー (つまり、ファイルの所有者ではないユーザー、またはそのユーザーが属するグループ) の権限を表し、形式は前の形式と一致します。

したがって、-rwxr-xr-x は、ファイルの所有者が読み取り、書き込み、および実行のアクセス許可を持ち、グループと他のユーザーが読み取りと実行のアクセス許可を持っていることを意味します。これは非常に一般的な権限設定です。つまり、このファイルの所有者はファイルを完全に制御できますが、他のユーザーは読み取りと実行のみが可能です。

3. バイナリ権限に変換する

Linux システムでは、ファイルのアクセス許可は、ファイル所有者のアクセス許可、グループのアクセス許可、およびその他のユーザーのアクセス許可に対応する 3 つの 8 進数で表されます。各 8 進数は 3 ビットで構成され、合計 8 ビットがあり、各ビットは 0 または 1 で、それぞれの権限を示します。

このうち、rは読み取り許可、wは書き込み許可、xは実行許可を意味し、対応する2進数はr=100、w=010、x=001となります。

したがって、-rwxr-xr-x に対応する 3 つの 8 進数は 755 となり、各ビットに対応する権限は次のとおりです。

ファイル所有者: 7 (バイナリ 111)

  • rwx (つまり、4+2+1 = 7)

グループ内: 5 (バイナリ 101)

  • rx (つまり、4+0+1 = 5)

他のユーザー: 5 (バイナリ 101)

  • rx (つまり、4+0+1 = 5)

このうち、番号 7 はすべてのアクセス許可が有効であること (rwx) を意味し、番号 5 は読み取りおよび実行アクセス許可が有効であるが、書き込みアクセス許可がオフであること (rx) を意味します。

4. 権限を変更する

function chmod($file, $permissions) {
    
    
    if (file_exists($file)) {
    
    
        $permissions = octdec($permissions);
        chmod($file, $permissions);
        return true;
    } else {
    
    
        return false;
    }
}

この関数は、ファイル名と変更する権限という 2 つのパラメータを受け入れます。まず、ファイルが存在するかどうかを確認し、存在する場合は、octdec() 関数を使用してアクセス許可を 10 進数に変換し、次に chmod() 関数を使用してアクセス許可を変更します。ファイルが存在しない場合は false を返します。

$file = '/path/to/file.txt';
$permissions = 0644; // 将权限设置为 640
if (chmod($file, $permissions)) {
    
    
    echo '文件权限已修改。';
} else {
    
    
    echo '文件权限修改失败。';
}

注: 如果文件不存在,则无法使用 chmod() 函数修改其权限


@リークタイムも時々あります

おすすめ

転載: blog.csdn.net/weixin_41290949/article/details/130931572