在PHP中操作文件的扩展属性

admin3年前PHP教程23

在操作系统的文件中,还存在着一种我们可以自己定义的文件属性。这些属性不是保存在文件内容中,也不是直接可以通过 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 等应用的相关知识。专注于一个领域,同时扩展其它领域的知识,才是学习的最佳方式。

测试代码:

github/zhangyue0503/dev-blog/blob/master/php/202010/source/9.在PHP中操作文件的扩展属性.php

参考文档:

php/manual/zh/book.xattr.php

到此这篇关于在PHP中操作文件的扩展属性的文章就介绍到这了,更多相关php扩展属性内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

php短视频源码之瀑布流分割线左右间距问题及解决代码

下面展示一下非瀑布流的item布局情况,每个item的高度都是一样的,所以他的index就是左右左右,position所对应的itemView就是准确的,左0,右1,左2,右3,以此类推&hellip...

php的单例模式及应用场景详解

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此...

购买国外多IP服务器需要考虑哪些购买国外多ip服务器配置选择

购买国外多IP服务器需要考虑哪些?国外多IP服务器选择需要注意一下这些方面。一、硬件方面是否合格建立一个优质完善的国外多IP服务器,最重要的就是考虑硬件。而硬件的组成部分里,最重要的便是内存和cpu。...

MacOS下PHP7.1升级到PHP7.4.15的方法

最近写SDK的时候需要用到object类型提示符,PHPStorm智能提示说需要PHP7.2以上才能支持这种类型提示。我一查我本机的PHP是7.1.30版本,于是考虑升级一下PHP版本。首先要尝试使用...

显卡服务器有什么用租用美国显卡服务器如何选择

显卡服务器实际上是配备独立显卡的物理服务器。用户可以通过远程桌面运行自己的程序和一些具有独立显卡需求的应用程序需求。为什么普通服务器没有显卡?由于许多服务器用于运行网站或作为应用程序的服务器,这些应用...

影响韩国多IP服务器租用的因素有哪些租用韩国多IP服务器地址是多少

影响韩国多IP服务器租用的因素很多,以下是一些常见的影响因素:成本:韩国多IP服务器的租用价格通常比单个IP服务器更高,因此成本可能成为租用决策的关键因素。需求:需要运行的应用程序和服务数量、流量大小...