在PHP中操作文件的擴(kuò)展屬性
在操作系統(tǒng)的文件中,還存在著一種我們可以自己定義的文件屬性。這些屬性不是保存在文件內(nèi)容中,也不是直接可以通過 ls -al 所能看到的內(nèi)容。它們可以將一個(gè)鍵值對(duì)信息永久得關(guān)聯(lián)到文件上,一般現(xiàn)在的 Linux 系統(tǒng)都支持這樣的文件擴(kuò)展屬性的功能。在操作系統(tǒng)中我們可以通過 setfattr、 getfattr、 attr 這些命令來(lái)操作它們。當(dāng)然,PHP 也為我們提供了一個(gè)擴(kuò)展可以用于對(duì)文件的擴(kuò)展屬性進(jìn)行操作。
添加擴(kuò)展屬性
$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__ 魔術(shù)常量來(lái)操作當(dāng)前我們測(cè)試的這個(gè) php 文件。然后使用 xattr_set() 就可以設(shè)置文件的擴(kuò)展屬性了。文件的擴(kuò)展屬性有命名空間的概念,PHP 中也相應(yīng)地為我們提供了 普通(user)命名空間 和 XATTR_ROOT(root命令空間) 兩種形式。root 命名空間中的屬性可以由超級(jí)用戶設(shè)置,對(duì)其他用戶不可見,而 user 命名空間則是根據(jù)文件的權(quán)限來(lái)定義的,也就是當(dāng)前可以操作這個(gè)文件的用戶就可以讀取到這個(gè)文件的 user命名空間 所設(shè)置的這些擴(kuò)展屬性。
查看擴(kuò)展屬性列表
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() 函數(shù)可以獲取文件所定義的所有命名空間的鍵。它也是區(qū)分 user 和 root 命名空間的。
獲得擴(kuò)展屬性內(nèi)容
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() 函數(shù)用于獲得指定鍵的擴(kuò)展屬性內(nèi)容。配合上面的 xattr_list() 函數(shù)就可以獲取某個(gè)文件的所有擴(kuò)展屬性信息。如果我們不增加 XATTR_ROOT 參數(shù)的話,是無(wú)法讀取到 root命名空間 中的內(nèi)容的。
刪除擴(kuò)展屬性
var_dump(xattr_remove($file, 'Num.')); // bool(true)
var_dump(xattr_list($file));
// array(1) {
// [0]=>
// string(6) "Author"
// }
xattr_remove() 用于刪除文件的擴(kuò)展屬性,我們直接刪除了測(cè)試文件的 user命名空間 中的 Num. 屬性。再次查看它的 xattr_list() 就只剩下 Author 了。同樣地,這個(gè)函數(shù)也是支持第三個(gè)參數(shù)來(lái)指定是否是 root命名空間 的操作。
驗(yàn)證系統(tǒng)是否支持?jǐn)U展屬性操作
var_dump(xattr_supported($file)); // bool(true)
最后就是一個(gè) xattr_supported() 函數(shù),用于驗(yàn)證當(dāng)前操作系統(tǒng)的文件系統(tǒng)是否支持 xattr 相關(guān)的操作。
總結(jié)
今天的內(nèi)容非常地簡(jiǎn)單淺顯,這個(gè)文件的擴(kuò)展屬性的功能說實(shí)話也是看到 PHP 中有這個(gè)功能擴(kuò)展才回去查看了 Linux 系統(tǒng)中的相關(guān)文檔。所以說,學(xué)習(xí)都是關(guān)聯(lián)的,當(dāng)我們?cè)趯W(xué)習(xí) PHP 的時(shí)候,順帶著也在學(xué)習(xí) Linux ,同時(shí)更會(huì)經(jīng)常接觸到 MySQL 、 Nginx 等應(yīng)用的相關(guān)知識(shí)。專注于一個(gè)領(lǐng)域,同時(shí)擴(kuò)展其它領(lǐng)域的知識(shí),才是學(xué)習(xí)的最佳方式。
測(cè)試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/9.在PHP中操作文件的擴(kuò)展屬性.php
參考文檔:
https://www.php.net/manual/zh/book.xattr.php
到此這篇關(guān)于在PHP中操作文件的擴(kuò)展屬性的文章就介紹到這了,更多相關(guān)php擴(kuò)展屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Symfony2使用第三方庫(kù)Upload制作圖片上傳實(shí)例詳解
這篇文章主要介紹了Symfony2使用第三方庫(kù)Upload制作圖片上傳的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Symfony2使用第三方庫(kù)Upload的具體步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-02-02
Laravel5.1 框架表單驗(yàn)證操作實(shí)例詳解
這篇文章主要介紹了Laravel5.1 框架表單驗(yàn)證操作,結(jié)合實(shí)例形式詳細(xì)分析了laravel5.1框架表單驗(yàn)證的具體實(shí)現(xiàn)步驟、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
PHP用swoole+websocket和redis實(shí)現(xiàn)web一對(duì)一聊天
這篇文章主要介紹了PHP用swoole+websocket和redis實(shí)現(xiàn)web一對(duì)一聊天,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
PHP中的靜態(tài)變量及static靜態(tài)變量使用詳解
這篇文章主要 紹了PHP中的靜態(tài)變量及static靜態(tài)變量使用詳解的相關(guān)資料,需要的朋友可以參考下2015-11-11
淺談php中urlencode與rawurlencode的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談php中urlencode與rawurlencode的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-09-09
LotusPhp筆記之:基于ObjectUtil組件的使用分析
學(xué)習(xí)要先易后難,好吧,我剛開始學(xué)習(xí)LotusPhp的時(shí)候,就是從最容易的Logger和ObjectUtil開始的,這2個(gè)組件基本沒有什么難度。一看就會(huì)2013-05-05
Yii1.1框架實(shí)現(xiàn)PHP極光推送消息通知功能
這篇文章主要介紹了Yii1.1框架實(shí)現(xiàn)PHP極光推送消息通知的相關(guān)資料,需要的朋友可以參考下2018-09-09
ThinkPHP框架基于PDO方式連接數(shù)據(jù)庫(kù)操作示例
這篇文章主要介紹了ThinkPHP框架基于PDO方式連接數(shù)據(jù)庫(kù)操作,結(jié)合完整實(shí)例形式分析了thinkPHP使用PDO方式連接數(shù)據(jù)庫(kù)的相關(guān)配置、控制器及模板調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
thinkPHP5框架閉包函數(shù)與子查詢傳參用法示例
這篇文章主要介紹了thinkPHP5框架閉包函數(shù)與子查詢傳參用法,結(jié)合實(shí)例形式分析了thinkPHP5閉包查詢與參數(shù)傳遞相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
Yii2框架實(shí)現(xiàn)利用mpdf創(chuàng)建pdf文件功能示例
這篇文章主要介紹了Yii2框架實(shí)現(xiàn)利用mpdf創(chuàng)建pdf文件功能,結(jié)合實(shí)例形式分析了mpdf的下載、安裝及結(jié)合Yii2框架創(chuàng)建pdf文件的相關(guān)操作技巧,需要的朋友可以參考下2019-02-02

