在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

到此這篇關於在PHP中操作文件的擴展屬性的文章就介紹到這瞭,更多相關php擴展屬性內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: