最終更新日:
公開日:
レシピ
ファイル / ディレクトリ
ファイル/ディレクトリの権限(パーミッション)を確認する
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