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() 函数修改其权限


@漏刻有时

相关文章
|
6天前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7天前
|
PHP
php 上传大文件获取失败问题
php 上传大文件获取失败问题
7 0
php 上传大文件获取失败问题
|
15天前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
1天前
|
存储 PHP 索引
|
8天前
|
PHP
php+ajax传file文件数据
php+ajax传file文件数据
12 0
|
9天前
|
PHP
php删除字符串中的所有空格
php删除字符串中的所有空格
10 0
|
21天前
|
PHP
PHP地方门户分类信息网站源码讯客分类信息系统源码(含手机版)
1.上传程序到网站根目录,访问http://域名/install/index.php 进行安装,不要直接打开网址,先直接安装; 2.安装完成后 后台恢复数据即可 默认帐号密码都是admin http://域名/admin/ 3.不要删除任何文件,因为删除文件或者修改代码可能造成错误
17 0
|
23天前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之如何使用PHP SDK调用函数并在请求体(body)中传递字符串
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
安全 PHP 数据库
【PHP开发专栏】PHP文件包含漏洞与防范
【4月更文挑战第30天】本文探讨了PHP文件包含漏洞,该漏洞让攻击者能执行恶意代码或访问敏感信息。文章分为三部分:原理、影响和防范。文件包含函数(如`include`和`require`)在攻击者控制文件名时可能导致漏洞。影响包括执行恶意代码、泄露敏感信息和影响服务器性能。防范措施包括验证文件名安全性、使用安全包含函数、设置安全包含路径和参数,以及定期更新和维护代码及库。开发者应重视此问题,采取相应措施保障应用安全。
|
2月前
|
安全 PHP
PHP反序列化---字符串逃逸(增加/减少)
PHP反序列化---字符串逃逸(增加/减少)