ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ
TOP  >  ドキュメント > 機能(フレームワーク非依存)  >  ファイルシステム

ファイルシステム

 ファイルシステム関連ライブラリは、ファイルの内容を操作するライブラリではなく、 ディレクトリやファイルのメタデータに関連する処理のまとまりです。

1. 使用例

(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