php fileperms函数如何准确地返回filetype?

ef1yzkbh  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(80)

我已经知道fileperms函数返回文件类型和文件权限,但我很难理解文件类型部分。
当我在一个.txt文件上使用它时,它返回了以下内容(在将其转换为八进制后)100666,我知道最后4位数字是权限,因此这里的文件类型是剩余的数字,即10,但10意味着该文件是一个符号链接,它不是,因为它是文本文件,应该被视为一个常规文件,应该是零。那么这里的问题是什么,我不应该得到00666作为输出吗?

6kkfgxo0

6kkfgxo01#

在类UNIX操作系统中,文件类型和权限表示为位掩码。fileperms函数将此位掩码作为整数返回。当你把它转换成八进制时,你会得到一个像100666这样的数字,它可以被分解如下:
最后三个数字(666)实际上表示文件权限。前导数字(100)表示文件类型和一些附加标志。100666中的10实际上不是十进制的10;八进制是10十进制是8它表示UNIX权限中的常规文件。符号链接有八进制的12(或十进制的10),而不是八进制的10。
所以,100666可以这样分解:
1.八进制为100(十进制为64)表示它是一个常规文件。

  1. 866表示文件的权限(rw- rw- rw-)。
    下面是如何隔离权限位和文件类型位的方法:
$perms = fileperms('/path/to/your/file.txt');
$perm_octal = substr(sprintf('%o', $perms), -4); // Get the last 4 digits
$perm_bits = $perms & 0777; // Isolate permission bits
$type_bits = $perms & 0170000; // Isolate type bits

相关问题