1. 程式人生 > >xattr-檔案系統擴充套件屬性

xattr-檔案系統擴充套件屬性

	簡介:
		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);
				}
			?>