在操作系统的文件中,还有一个文件属性,我们可以自己定义。这些属性不存储在文件的内容中,也不能通过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','说名',XATTR_ROOT));//bool(true)首先我们定义要操作的文件,这里直接使用\_\_FILE\_\_魔术常量来操作我们当前测试的php文件。然后使用xattr_set()设置文件的扩展属性。文件的扩展属性有命名空间的概念,PHP也为我们提供了普通(用户)命名空间和XATTR_ROOT(根命令空间)两种形式。根命名空间中的属性可以由超级用户设置,其他用户不可见,而用户命名空间是根据文件的权限定义的,即当前可以操作这个文件的用户可以读取这个文件的用户.这些扩展属性由命名空间设置。查看扩展属性列表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()函数可以获取文件定义的所有名称空间的键。它还区分用户和根命名空间。获取扩展属性内容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)"硕铭"xattr_get()函数用于获取指定key的扩展属性内容。通过上面的xattr_list()函数,可以得到一个文件的所有扩展属性信息。如果我们不增加XATTR_ROOT参数,我们将无法读取根命名空间的内容。删除扩展属性var_dump(xattr_remove($file,'Num.'));//bool(true)var_dump(xattr_list($file));//array(1){//[0]=>//string(6)"Author"//}xattr_remove()用于删除文件的扩展属性,我们直接删除了Num。测试文件的用户命名空间中的属性。再看它的xattr_list(),只剩下Author了。同样,该函数也支持第三个参数指定是否是根命名空间的操作。验证系统是否支持扩展属性操作var_dump(xattr_supported($file));//bool(true)最后是一个xattr_supported()函数,用于验证当前操作系统的文件系统是否支持xattr相关操作。综上所述,今天的内容非常简单明了。说实话,这个文件的extended属性的作用就是看到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============各媒体平台均可搜索【硬核项目经理】
