在作業系統的檔案中,也存在著我們可以自己定義的檔案屬性。這些屬性不是保存在文件內容中,也不是直接能看到的內容。它們可以將一個鍵值對資訊永久得關聯到檔案上,一般現在的 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
推薦學習:php影片教學
#以上是PHP如何操作檔案的擴充屬性的詳細內容。更多資訊請關注PHP中文網其他相關文章!