xattr-檔案系統擴充套件屬性
阿新 • • 發佈:2019-02-07
簡介: xattr擴充套件,允許操作 '檔案系統的擴充套件屬性' 安裝: 1.為了使用xattr,需要安裝 'libattr'。 2.切記: xattr擴充套件函式,僅僅作用於支援 '擴充套件屬性的檔案系統',並在掛載檔案系統時,需要開啟xattr。支援擴充套件屬性常見的檔案系統有:ext2, ext3, reiserfs, jfs和xfs。 3.手冊上有人註釋: 他在ext4檔案系統使用 'xattr',一直不工作,最終發現是未啟用 'xattr擴充套件屬性',下面是它的解決方案: linux下的分割槽等,使用 'df' 可檢視(好久沒看過命令了...): /dev/sdb2 /home ext4 relatime,user_xattr(掛載檔案系統就得啟用!) 0 2 4.安裝PECL擴充套件:http://pecl.php.net/package/xattr 預定義常量: XATTR_ROOT - 在root(信任)名稱空間設定屬性,需要root許可權 XATTR_DONTFOLLOW - 不要連結到符號連結指向到檔案,就操作符號連結檔案自身 XATTR_CREATE - 如果擴充套件屬性已經存在,函式返回false(建立新屬性) XATTR_REPLACE - 如果擴充套件屬性不存在,函式返回false(替換舊屬性) 函式: xattr_supported(string $filename[, int $flags = 0]) 檢查給定檔案所在的檔案系統,是否支援 '擴充套件屬性'。需要檔案的 '讀許可權'。 引數: $filename - 測試的檔案路徑 $flags - 只支援 'XATTR_DONTFOLLOW' (看前面常量定義) 返回值: true - 支援 false - 不支援 NULL - 不能決定(例如:錯誤的檔案路徑或缺少讀許可權) xattr_list(string $filename[, int $flags = 0]) 1.返回指定檔案的擴充套件屬性名稱的列表 2.擴充套件的屬性有兩種 不同的名稱空間:user 和 root。user 名稱空間對所有使用者均有效,而 root 名稱空間僅對擁有 root 許可權的使用者有效。 xattr 預設在 user 名稱空間上操作,但可使用 flags 引數進行更改。 引數: $filename - 測試的檔案路徑 $flags - 支援 'XATTR_DONTFOLLOW' (看前面常量定義) 'XATTR_ROOT' (看前面常量定義) 示例: <?php $file = 'some_file'; $root_attributes = xattr_list($file, XATTR_ROOT); // root使用者屬性 $user_attributes = xattr_list($file); // 所有使用者屬性 echo "Root attributes: \n"; foreach ($root_attributes as $attr_name) { printf("%s\n", $attr_name); } echo "\n User attributes: \n"; foreach ($attributes as $attr_name) { printf("%s\n", $attr_name); } ?> xattr_set(string $filename, string $name, string $value[, int $flags = 0]) 1.給指定的檔案設定一個擴充套件屬性 2.擴充套件的屬性有兩種 不同的名稱空間:user 和 root。user 名稱空間對所有使用者均有效,而 root 名稱空間僅對擁有 root 許可權的使用者有效。 xattr 預設在 user 名稱空間上操作,但可使用 flags 引數進行更改。 引數: $filename - 給哪個檔案設定擴充套件屬性 $name - 擴充套件屬性名。不存在將建立,存在則替換。可通過 flags 來改變預設行為。 $value - 屬性名 flags - 4個都支援 示例: <?php $file = 'my_favourite_song.wav'; // 我們可以給檔案設定各種我們想設定的屬性! xattr_set($file, 'Artist', 'Someone'); xattr_set($file, 'My ranking', 'Good'); xattr_set($file, 'Listen count', '34'); ?> xattr_get(string $filename, string $name[, int $flags = 0]) 1.獲取指定檔案設定的某個擴充套件屬性名的值 2.擴充套件的屬性有兩種 不同的名稱空間:user 和 root。user 名稱空間對所有使用者均有效,而 root 名稱空間僅對擁有 root 許可權的使用者有效。 xattr 預設在 user 名稱空間上操作,但可使用 flags 引數進行更改。 引數: $filename - 給哪個檔案設定擴充套件屬性 $name - 擴充套件屬性名 flags - 支援 'XATTR_DONTFOLLOW' (看前面常量定義) 'XATTR_ROOT' (看前面常量定義) 示例: <?php $file = 'my_favourite_song.wav'; // 獲取屬性 xattr_get($file, 'Artist', XATTR_ROOT); ?> xattr_remove(string $filename, string $name[, int $flags = 0]) 1.刪除指定檔案的擴充套件屬性 2.擴充套件的屬性有兩種 不同的名稱空間:user 和 root。user 名稱空間對所有使用者均有效,而 root 名稱空間僅對擁有 root 許可權的使用者有效。 xattr 預設在 user 名稱空間上操作,但可使用 flags 引數進行更改。 引數: $filename - 給哪個檔案設定擴充套件屬性 $name - 擴充套件屬性名 flags - 支援 'XATTR_DONTFOLLOW' (看前面常量定義) 'XATTR_ROOT' (看前面常量定義) 示例: <?php $file = 'some_file'; $attributes = xattr_list($file); // 依次刪除檔案的所有擴充套件屬性 foreach ($attributes as $attr_name) { xattr_remove($file, $attr_name); } ?>