php获取文件的权限信息(获取权限信息、返回字符串涵义、二进制的转换方式、权限修改)

简介: php获取文件的权限信息(获取权限信息、返回字符串涵义、二进制的转换方式、权限修改)

说明

(图片来源于网络)

文件权限是指文件或目录对用户和其他进程的访问许可。在 Unix 和 Linux 系统中,文件和目录都有三个权限:读、写和执行。这三个权限分别用数字 1、2 和 4 表示。

例如,文件 file.txt 可能有以下权限:

-rwxr-xr-x 1 user group other

其中,rwx 表示用户可以读、写和执行文件;r-x 表示用户可以读和执行文件;r-- 表示用户只能读取文件;-x 表示用户不能执行文件。

文件权限通常用八进制数表示,例如 644,表示文件对用户和其他进程具有读、写和执行权限。在 Windows 系统中,文件权限通常用十六进制数表示,例如 0644。

在权限设置中,通常需要考虑以下几个方面:

用户:谁可以访问文件或目录?

组:哪些用户组可以访问文件或目录?

其他:如何控制其他进程对文件或目录的访问?

通过设置文件权限,可以保护文件和目录的安全性,同时也可以控制文件的使用方式。


1.获取文件的权限信息

PHP 中可以使用 fileperms() 函数来获取文件的权限信息。该函数可以接收一个文件名或者文件句柄作为参数,并返回一个表示当前文件权限的八进制数值。你可以利用八进制数对比对应的权限标记,来判断文件的读写权限。这是一段示例代码:

function getFilePermission($filename) {
    clearstatcache(true, $filename);
    $perms = fileperms($filename);
    if (($perms & 0xC000) === 0xC000) {
        $info = 's';
    } elseif (($perms & 0xA000) === 0xA000) {
        $info = 'l';
    } elseif (($perms & 0x8000) === 0x8000) {
        $info = '-';
    } elseif (($perms & 0x6000) === 0x6000) {
        $info = 'b';
    } elseif (($perms & 0x4000) === 0x4000) {
        $info = 'd';
    } elseif (($perms & 0x2000) === 0x2000) {
        $info = 'c';
    } elseif (($perms & 0x1000) === 0x1000) {
        $info = 'p';
    } else {
        $info = 'u';
    }
    $info .= (($perms & 0x0100) ? 'r' : '-');
    $info .= (($perms & 0x0080) ? 'w' : '-');
    $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));
    $info .= (($perms & 0x0020) ? 'r' : '-');
    $info .= (($perms & 0x0010) ? 'w' : '-');
    $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));
    $info .= (($perms & 0x0004) ? 'r' : '-');
    $info .= (($perms & 0x0002) ? 'w' : '-');
    $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));
    return $info;
}
// 使用示例
echo getFilePermission('example.txt'); // 返回 "-rw-rw-r--"


该函数将根据文件权限设置返回一个字符串表示文件权限。其中,第一个字符代表文件类型,后面九个字符分别代表文件拥有者、群组及其他人的读写权限,‘r’ 表示只读权限,‘w’ 表示可写权限,‘x’ 表示可执行权限, ‘-’ 表示无某种权限,通过这些字符的组合可以用来表示文件的全部权限信息。

2.返回文件权限字符的解读

返回结果:-rwxr-xr-x

-rwxr-xr-x,在Linux 系统中权限是区分用户的,即用户、组用户、其他用户,第一位表示文件的类型,-代表文件,d代表目录,其他每个用户占三个字符,这里-rwxr-xr-x对应如下关系

第一位 用户 组用户 其他用户
- rwx r-x r-x


这是一个文件或目录的权限表示,一共由10个字符组成,从左到右依次表示:


第一个字符表示文件类型(-表示普通文件,d表示目录,l表示符号链接文件等);

接下来的三个字符表示文件所有者的权限,r表示读权限,w表示写权限,x表示可执行权限;如果没有权限,用-表示;

接下来的三个字符表示文件所有者所在组的权限,格式与前面一致;

最后三个字符表示其他用户的权限(即不是文件所有者也不是所在组的用户),格式与前面一致。

所以,-rwxr-xr-x 就表示这个文件的所有者有读、写、执行权限,所在组和其他用户有读、执行权限。这是一个非常常见的权限设置,表示这个文件所有者对它有完全控制权,而其他用户只能读和执行它。


3.转为二进制权限

在Linux系统中,文件权限用三个八进制数字来表示,分别对应文件所有者权限、所在组权限、其他用户权限。每个八进制数字由三个比特位构成,一共有八个比特位,每个比特位可以是0或1,表示各自的权限情况。


其中,r表示读权限,w表示写权限,x表示执行权限,对应的二进制数分别为:r=100, w=010, x=001。


因此,-rwxr-xr-x对应的三个八进制数字分别为: 755,对应每个比特位的权限如下:


文件所有者 : 7 (二进制 111)


rwx (即 4+2+1 = 7)

所在组: 5 (二进制 101)


r-x (即 4+0+1 = 5)

其他用户: 5 (二进制 101)


r-x (即 4+0+1 = 5)

其中,数字7表示所有权限都开启,即rwx;数字5表示读和执行权限开启,但是写权限关闭,即r-x。


4.修改权限

function chmod($file, $permissions) {
    if (file_exists($file)) {
        $permissions = octdec($permissions);
        chmod($file, $permissions);
        return true;
    } else {
        return false;
    }
}

这个函数接受两个参数:文件名和要修改的权限。首先,它会检查文件是否存在,如果存在,则使用 octdec() 函数将权限转换为十进制数,然后使用 chmod() 函数修改权限。如果文件不存在,则返回 false。

$file = '/path/to/file.txt';
$permissions = 0644; // 将权限设置为 640
if (chmod($file, $permissions)) {
    echo '文件权限已修改。';
} else {
    echo '文件权限修改失败。';
}


注:如果文件不存在,则无法使用 chmod() 函数修改其权限


@漏刻有时

相关文章
|
3月前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
15天前
|
PHP
在PHP中,字符串操作
在PHP中,字符串操作
22 3
|
16天前
|
PHP
06 一文带你搞定PHP字符串操作
路老师带你深入PHP:本文详细介绍了PHP中的字符串定义、操作及常用函数,包括字符串的定义方式、定界符、字符串操作(如去除空格、获取长度、截取、替换、分割和合成等)。通过实例讲解,帮助你快速掌握PHP字符串处理技巧。
22 2
|
3月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
3月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
3月前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
3月前
进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
这段代码实现了一个网站上弹出的促销海报动画效果,包含一个关闭按钮。当促销海报弹出时,会在三秒后开始抖动一两下。海报使用固定定位居中显示,带有阴影和圆角,关闭按钮位于右上角。可以通过修改时间参数调整弹出时间。
20 0
|
3月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
4月前
|
存储 安全 数据库连接
php.ini 文件的用途是什么?
【8月更文挑战第29天】
75 1
|
4月前
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
57 0
PHP——调用java文件中的方法