ファイルシステム関連ライブラリは、ファイルの内容を操作するライブラリではなく、 ディレクトリやファイルのメタデータに関連する処理のまとまりです。
(1) ディレクトリ、ファイル一覧を取得する
指定したディレクトリ内のディレクトリ、ファイルの一覧をSyL_Filesystemオブジェクトとして取得します。
// ファイルシステムライブラリのロード SyL_Loader::lib('Filesystem'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Filesystem.php'; // 一覧を取得するディレクトリ $base_dir = '/usr/local' // ディレクトリ一覧用オブジェクト $dir =& SyL_Filesystem::factory($base_dir); // ディレクトリ内一覧構築 $dir->createTree(); // ディレクトリ、ファイル取得 foreach ($dir->getList() as $element) { print_r($element); } ---------- syl_filesystemdirectory Object ( [name] => /usr/local/apache2 [type] => dir [stat] => Array ( [dev] => 2051 [ino] => 114415 [mode] => 17901 [nlink] => 15 [uid] => 0 [gid] => 50 [rdev] => 0 [size] => 4096 [atime] => 1197701937 [mtime] => 1158184951 [ctime] => 1158184951 [blksize] => 4096 [blocks] => 8 ) [elements] => Array ( ) [sort] => [asc] => 1 ) syl_filesystemdirectory Object ( ...
SyL_Filesystem::factory メソッドで、SyL_Filesystem オブジェクトを作成してから、createTree メソッドで ディレクトリツリー情報を取得します。デフォルトで指定ディレクトリの1階層のみ取得しますが、引数で取得階層を 指定できます。
// ディレクトリ内一覧を2階層まで取得 $dir->createTree(2); // ディレクトリ内一覧を下階層全て取得 $dir->createTree(null);
一覧情報を取得するに getList メソッドを使用し、ディレクトリ/ファイル要素を SyL_Filesystem オブジェクトとして取得ます。 SyL_Filesystem オブジェクトからは、見やすい形式で取得できます。
// ファイル名を取得 $name = $element->getName(true); // ファイルタイプを取得 $type = $element->getType(); // パーミッションを取得 $perm = $element->getPermission(false); // オーナー名を取得 $owner = $element->getOwner(); // ファイルサイズを見やすい形式で取得 $size = SyL_Filesystem::formatSize($element->getSize()); // 更新時間を取得 $mtime = $element->getMtime(); echo 'name: ' . $name . "\n"; echo 'type: ' . $type . "\n"; echo 'perm: ' . $perm . "\n"; echo 'owner: ' . $owner . "\n"; echo 'size: ' . $size . "\n"; echo 'mtime: ' . $mtime . "\n"; ---------- name: apache2 type: dir perm: drwxr-sr-x owner: root size: 4KB mtime: 2006-09-14 07:02:31
また、getList メソッドの引数を使用して、ディレクトリ/ファイル一覧をソートして取得することもできます。
// ディレクトリ内一覧をファイルサイズでソートして昇順に取得 $dir->getList('size', true);
(2) ディレクトリ操作
ディレクトリの作成と削除のコード例です。このコード例は、作成/削除の権限があることが前提です。
// ファイルシステムライブラリのロード SyL_Loader::lib('Filesystem'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Filesystem.php'; // 基底ディレクトリ $base_dir = '/usr/local/apache2/data'; // ディレクトリ一覧用オブジェクト $dir =& SyL_Filesystem::factory($base_dir); // ディレクトリを作成(子ディレクトリを再帰的に作成可能) $dir->createDirectory('test11/test22/test33/test44/test55'); $dir =& SyL_Filesystem::factory($base_dir); // ディレクトリを削除(子ディレクトリを再帰的に削除可能) $dir->delete();
(3) ディスク状況
// ファイルシステムライブラリのロード SyL_Loader::lib('Filesystem'); // SyLフレームワークを使用しない場合は直接インクルード // include_once SYL_INCLUDE_DIR . '/lib/SyL_Filesystem.php'; // 基底ディレクトリ $base_dir = '/usr/local/apache2/data'; // 指定ディレクトリが属するパーテーションの空き容量取得 $free_size = SyL_Filesystem::getFreeSpace($base_dir); $free_size = SyL_Filesystem::formatSize($free_size, 'MB'); // 指定ディレクトリが属するパーテーションの使用容量取得 $use_size = SyL_Filesystem::getUsedSpace($base_dir); $use_size = SyL_Filesystem::formatSize($use_size, 'MB'); // 指定ディレクトリが属するパーテーションの全容量取得 $total_size = SyL_Filesystem::getTotalSpace($base_dir); $total_size = SyL_Filesystem::formatSize($total_size, 'MB'); echo 'free size : ' . $free_size . "\n"; echo 'use size : ' . $use_size . "\n"; echo 'total size : ' . $total_size . "\n"; ---------- free size : 6,332MB use size : 3,172MB total size : 9,504MB