在PHP中操作文件的扩展属性
在操作系统的文件中,还存在着一种我们可以自己定义的文件属性。这些属性不是保存在文件内容中,也不是直接可以通过 ls -al 所能看到的内容。它们可以将一个键值对信息永久得关联到文件上,一般现在的 Linux 系统都支持这样的文件扩展属性的功能。在操作系统中我们可以通过 setfattr、 getfattr、 attr 这些命令来操作它们。当然,PHP 也为我们提供了一个扩展可以用于对文件的扩展属性进行操作。
添加扩展属性
$file = __FILE__;
var_dump(xattr_set($file, 'Author', 'ZyBlog')); // bool(true)
var_dump(xattr_set($file, 'Num.', 121 )); // bool(true)
var_dump(xattr_set($file, 'Description', 'shuo ming', XATTR_ROOT)); // bool(true)
首先我们定义了操作的文件,在这里我们直接使用 __FILE__ 魔术常量来操作当前我们测试的这个 php 文件。然后使用 xattr_set() 就可以设置文件的扩展属性了。文件的扩展属性有命名空间的概念,PHP 中也相应地为我们提供了 普通(user)命名空间 和 XATTR_ROOT(root命令空间) 两种形式。root 命名空间中的属性可以由超级用户设置,对其他用户不可见,而 user 命名空间则是根据文件的权限来定义的,也就是当前可以操作这个文件的用户就可以读取到这个文件的 user命名空间 所设置的这些扩展属性。
查看扩展属性列表
var_dump(xattr_list($file, XATTR_ROOT));
// array(1) {
// [0]=>
// string(11) "Description"
// }
var_dump(xattr_list($file));
// array(2) {
// [0]=>
// string(4) "Num."
// [1]=>
// string(6) "Author"
// }
xattr_list() 函数可以获取文件所定义的所有命名空间的键。它也是区分 user 和 root 命名空间的。
获得扩展属性内容
var_dump(xattr_get($file, 'Author')); // string(6) "ZyBlog"
var_dump(xattr_get($file, 'Description')); // bool(false)
var_dump(xattr_get($file, 'Description', XATTR_ROOT)); // string(9) "shuo ming"
xattr_get() 函数用于获得指定键的扩展属性内容。配合上面的 xattr_list() 函数就可以获取某个文件的所有扩展属性信息。如果我们不增加 XATTR_ROOT 参数的话,是无法读取到 root命名空间 中的内容的。
删除扩展属性
var_dump(xattr_remove($file, 'Num.')); // bool(true)
var_dump(xattr_list($file));
// array(1) {
// [0]=>
// string(6) "Author"
// }
xattr_remove() 用于删除文件的扩展属性,我们直接删除了测试文件的 user命名空间 中的 Num. 属性。再次查看它的 xattr_list() 就只剩下 Author 了。同样地,这个函数也是支持第三个参数来指定是否是 root命名空间 的操作。
验证系统是否支持扩展属性操作
var_dump(xattr_supported($file)); // bool(true)
最后就是一个 xattr_supported() 函数,用于验证当前操作系统的文件系统是否支持 xattr 相关的操作。
总结
今天的内容非常地简单浅显,这个文件的扩展属性的功能说实话也是看到 PHP 中有这个功能扩展才回去查看了 Linux 系统中的相关文档。所以说,学习都是关联的,当我们在学习 PHP 的时候,顺带着也在学习 Linux ,同时更会经常接触到 MySQL 、 Nginx 等应用的相关知识。专注于一个领域,同时扩展其它领域的知识,才是学习的最佳方式。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/9.在PHP中操作文件的扩展属性.php
参考文档:
https://www.php.net/manual/zh/book.xattr.php
===============
关注公众号:【硬核项目经理】获取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免费得PHP、项目管理学习资料
知乎、公众号、抖音、头条搜索【硬核项目经理】
B站ID:482780532
在PHP中操作文件的扩展属性的更多相关文章
- PHP中的文件对比扩展
文件对比这个扩展现在用得比较少,因为大部分情况下我们都在使用一些代码管理工具,比如 Git 或者 Svn 之类的,其实它的作用就非常类似这类工具,另外还有一个非常常用的 Beyond Compare ...
- 在Python中操作文件之truncate()方法的使用教程
在Python中操作文件之truncate()方法的使用教程 这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 ...
- Windows内核驱动中操作文件
本页主题:如何在windows内核驱动中对文件操作,实现对文件的拷贝.粘贴.删除.查询信息等,这是很常用也是很简单的方法. 部分内容参考:http://www.cppblog.com/aurain/a ...
- 在NodeJS中操作文件常见的API
阅读目录 一:如何读整个文件内容? 二:如何写入整个文件内容? 三:如何在文件中的指定位置处读入内容? 四:如何在文件中的指定位置处写入内容? 五:如何创建与读取目录? 六:如何查看与修改文件或目录的 ...
- chattr 改变文件的扩展属性
1. 命令功能 chattr和lsattr用来改变文件.目录属性和查看这种文件属性:chmod只是改变文件的读.写.执行权限,更底层的属性控制是由chattr来改变. 2. 语法格式 chattr [ ...
- linux中改变文件权限和属性
Linux中,默认显示所有用户名的文件在/etc/passwd,用户组的信息在/etc/group 密码/etc/shadow chgrp改变文件所属用户组 chgrp [-R] 用户组名 文件或目录 ...
- Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- Android(java)学习笔记110:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- windows中操作文件和目录的函数
1.文件操作函数 CreateFile();//创建或打开文件 ReadFile();//从文件读 WriteFile();//向文件写 SetFilePoi ...
随机推荐
- AI+云原生,把卫星遥感虐的死去活来
摘要:遥感影像,作为地球自拍照,能够从更广阔的视角,为人们提供更多维度的辅助信息,来帮助人类感知自然资源.农林水利.交通灾害等多领域信息. 本文分享自华为云社区<AI+云原生,把卫星遥感虐的死去 ...
- 【笔记】模型泛化与岭回归与LASSO
模型泛化与岭回归与LASSO 模型正则化 模型正则化,简单来说就是限制参数大小 模型正则化是用什么思路来解决先前过拟合的由于过于拟合导致的曲线抖动(线性方程前的系数都很大) 线性回归的目标就是求一个最 ...
- 【笔记】使用PCA对数据进行降噪(理解)
使用PCA对数据进行降噪(使用手写数字实例) (在notebook中) 加载库并制作虚拟的数据并进行绘制 import numpy as np import matplotlib.pyplot as ...
- Python - typing 模块 —— 类型别名
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
- gcc limits.h的bug定位看include_next和默认搜索路径
手编的交叉编译工具链经常报一堆宏未定义,例如下面是编译gtest的时候报_POSIX_PATH_MAX宏未定义,有时还会上报SSIZE_MAX等宏未定义: googletest/src/gtest-f ...
- Apache/Nginx/IIS 访问日志详解
Apache日志详解 1.Apache日志文件名称及所在路径 日志文件一般都是保存在在apache/logs目录下,实际情况可以根据Apache的配置文件去查找日志文件所在的路径. 例如phpstud ...
- Maven 下载、安装与配置
一.需要准备的东西 确定电脑上已经成功安装JDK 二.下载与安装 1. 前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 注意:Maven3. ...
- SpringBoot整合mybatis快速入门
一.创建一个SpringBoot项目 二.引入相关依赖 <!--web核心依赖--> <dependency> <groupId>o ...
- WPF 中的 button style 的修改
<Style x:Key="ButtonStyleTransBack" TargetType="Button"> <Setter Proper ...
- COM笔记-包容与聚合
COM不支持实现继承的原因在于这种继承方式将使得一个对象的实现同另外一个对象的实现紧紧地关联起来.在这种情况下,当基类的实现被修改后,派生类将无法正常运行而必须被修改.这就是为什么一些用C++编写大型 ...