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--
这通过检查每个权限位来构建一个完整的权限字符串。第一个字符显示文件类型,后面是所有者/组/其他用户的权限。
最佳实践
- 错误处理: 始终检查 fileperms 是否返回 false。
- 安全性: 谨慎处理敏感的文件权限。
- 跨平台: 结果可能因操作系统而异。
- 性能: 如果重复检查,请缓存结果。
来源
本教程介绍了 PHP fileperms 函数,并提供了实际示例,展示了如何检查和解释文件权限。
作者
列出 所有 PHP 文件系统函数。