PHPプログラミング

最終更新日:
公開日:

レシピ

ファイル / ディレクトリ

ファイル/ディレクトリの権限(パーミッション)を確認する

fileperms関数を使って、ファイル/ディレクトリの権限(パーミッション)を確認する方法を解説します。

この記事のポイント

  • ファイル/ディレクトリの権限(パーミッション)を取得する
  • 取得した権限情報を分かりすい値に変換する

目次

ファイル/ディレクトリの権限(パーミッション)を確認する

fileperms関数にファイル、またはディレクトリのパスを渡すと、現在設定されている権限(パーミッション)を取得することができます。

コード例

fileperms("./memo.txt");

返り値はパーミッションの整数ですが、8進数で出力すると馴染みのある値として取得することができます。

コード例

echo substr( sprintf( '%o', fileperms($path1)), -4);

出力例

0755

sprintf関数の第一パラメータ「%o」は、第二パラメータの値を8進数形式に変換するための指定です。
値にはファイル情報も含まれるため、さらにsubstr関数で後ろから4文字だけを取り出すように「-4」を指定します。

使用例

ファイルの更新日時を取得し、date関数で時刻フォーマットを整えて出力する例です。

ファイル / ディレクトリのパーミッション例

-rwxr-xr-x+ 1 test user  138 Dec 13 15:48 index.html
-rwx----w-+ 1 test user  19 Dec 13 15:02 memo.txt
drwxr---w-+ 2 test user  64 Dec 13 15:01 temp
drwxr-xr-x+ 4 test user  128 Dec 13 16:02 dir2

それぞれの権限を取得し、表示していきます。

コード例

$path1 = './test/index.html';
$path2 = './test/memo.txt';
$path3 = './test/dir2/';
$path4 = './test/temp/';

echo "パーミッションは「" . substr( sprintf( '%o', fileperms($path1)), -4) . "」<br>";
echo "パーミッションは「" . substr( sprintf( '%o', fileperms($path2)), -4) . "」<br>";
echo "パーミッションは「" . substr( sprintf( '%o', fileperms($path3)), -4) . "」<br>";
echo "パーミッションは「" . substr( sprintf( '%o', fileperms($path4)), -4) . "」";

出力例

パーミッションは「0755」
パーミッションは「0702」
パーミッションは「0755」
パーミッションは「0742」

もし、数値ではなくファイル一覧のように「rwx」などの記載で権限を取得したい場合は、次のようにビット演算を使って計算します。
(php.netの「fileperms」ページに掲載されているソースを元にしています。)

コード例

$path1 = './test/index.html';
$path2 = './test/memo.txt';
$path3 = './test/dir2/';
$path4 = './test/temp/';

// パーミッションを取得
$perms = fileperms($path1);

switch ($perms & 0xF000) {

    case 0x8000: // 通常のファイル
        $rwx = '-';
        break;
    case 0x4000: // ディレクトリ
        $rwx = 'd';
        break;
    
    default: // 不明
        $rwx = 'u';
}

// 所有者
$rwx .= ($perms & 0x0100)?'r':'-';
$rwx .= ($perms & 0x0080)?'w':'-';
$rwx .= ($perms & 0x0040)?'x':'-';

// 所有グループ
$rwx .= ($perms & 0x0020)?'r':'-';
$rwx .= ($perms & 0x0010)?'w':'-';
$rwx .= ($perms & 0x0008)?'x':'-';

// 全体
$rwx .= ($perms & 0x0004)?'r':'-';
$rwx .= ($perms & 0x0002)?'w':'-';
$rwx .= ($perms & 0x0001)?'x':'-';

echo $rwx;

出力例

-rwxr-xr-x