ZetCode

PHP fileperms 函数

最后修改于 2025 年 4 月 3 日

PHP 的 fileperms 函数用于检索文件或目录的权限。它以可以格式化的数值形式返回权限。

基本定义

fileperms 函数返回指定文件的权限。返回值是一个需要解码成人类可读形式的位掩码。

语法:fileperms(string $filename): int|false。失败时返回 false。结果包含文件类型和权限位组合。

基本的 fileperms 示例

这展示了 fileperms 获取权限的最简单用法。

basic_fileperms.php
<?php

declare(strict_types=1);

$filename = "example.txt";
$perms = fileperms($filename);

echo $perms; // Outputs numeric value like 33206

这返回一个表示文件权限的数值。需要将该数字转换为八进制才能进行有意义的解释。

格式化权限

我们可以将数值权限格式化为人类可读的字符串。

format_perms.php
<?php

declare(strict_types=1);

$filename = "example.txt";
$perms = fileperms($filename);

echo substr(sprintf('%o', $perms), -4); // Outputs like 0644

这将权限转换为八进制,并显示最后 4 位数字。第一位代表特殊位,接下来的三位是所有者/组/其他用户。

检查特定权限

我们可以使用位运算来检查是否设置了特定权限。

check_perms.php
<?php

declare(strict_types=1);

$filename = "example.txt";
$perms = fileperms($filename);

if ($perms & 0x0080) {
    echo "Owner has write permission\n";
} else {
    echo "Owner doesn't have write permission\n";
}

这检查所有者是否具有写入权限 (0x0080)。位与运算将权限位与我们的测试值进行比较。

获取文件类型

权限值还包含有关文件类型的信息。

file_type.php
<?php

declare(strict_types=1);

$filename = "example.txt";
$perms = fileperms($filename);

switch ($perms & 0xF000) {
    case 0xC000: echo "Socket"; break;
    case 0xA000: echo "Symbolic link"; break;
    case 0x8000: echo "Regular file"; break;
    case 0x6000: echo "Block device"; break;
    case 0x4000: echo "Directory"; break;
    case 0x2000: echo "Character device"; break;
    case 0x1000: echo "FIFO pipe"; break;
    default: echo "Unknown file type";
}

这检查权限值的高位以确定文件类型。每种文件类型在最高位都有一个唯一的标识符。

完整的权限字符串

我们可以创建一个完整的权限字符串,例如 "drwxr-xr-x"。

full_perms.php
<?php

declare(strict_types=1);

function getPerms($filename): string {
    $perms = fileperms($filename);
    $info = '';
    
    $info .= (($perms & 0x4000) ? 'd' : '-');
    $info .= (($perms & 0x0100) ? 'r' : '-');
    $info .= (($perms & 0x0080) ? 'w' : '-');
    $info .= (($perms & 0x0040) ? 'x' : '-');
    $info .= (($perms & 0x0020) ? 'r' : '-');
    $info .= (($perms & 0x0010) ? 'w' : '-');
    $info .= (($perms & 0x0008) ? 'x' : '-');
    $info .= (($perms & 0x0004) ? 'r' : '-');
    $info .= (($perms & 0x0002) ? 'w' : '-');
    $info .= (($perms & 0x0001) ? 'x' : '-');
    
    return $info;
}

echo getPerms("example.txt"); // Outputs like -rw-r--r--

这通过检查每个权限位来构建一个完整的权限字符串。第一个字符显示文件类型,后面是所有者/组/其他用户的权限。

最佳实践

来源

PHP fileperms 文档

本教程介绍了 PHP fileperms 函数,并提供了实际示例,展示了如何检查和解释文件权限。

作者

我叫 Jan Bodnar,是一位热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 文件系统函数