Folder & File

Folder と File ユーティリティは、ファイルの読み書きやフォルダ内のファイル名一覧の取得、その他ディレクトリに関連するタスクにおいて便利なクラスです。

基本的な使い方

App::uses() を使ってクラスをロードします。

App::uses('Folder', 'Utility');
App::uses('File', 'Utility');

すると、新しいフォルダインスタンスをセットアップすることができるようになります。

$dir = new Folder('/path/to/folder');

インスタンスを作成したフォルダ内から .ctp の拡張子が付いたファイルを正規表現検索する場合はこのようにします。

$files = $dir->find('.*\.ctp');

これでファイルの読み込みや、コンテンツの書き込み、ファイルの削除などが行えるようになります。

foreach ($files as $file) {
    $file = new File($dir->pwd() . DS . $file);
    $contents = $file->read();
    // $file->write('このファイルの内容を上書きします');
    // $file->append('このファイルの最後に追記します。');
    // $file->delete(); // このファイルを削除します
    $file->close(); // 終了時にファイルをクローズしましょう
}

Folder API

class Folder(string $path = false, boolean $create = false, mixed $mode = false)
// 0755 のパーミッションで新しいフォルダを作成します
$dir = new Folder('/path/to/folder', true, 0755);
property Folder::$path

フォルダの現在のパス。 Folder::pwd() でも同じ情報を返します。

property Folder::$sort

ファイルリストを取得する際に、名前によるソートを実行するか否かの値。

property Folder::$mode

フォルダ作成時のモード。デフォルトでは 0755 。 Windows マシンでは何も影響しません。

static Folder::addPathElement($path, $element)
戻り値の型:string

$path と $element の間に適切なスラッシュを加えて返します。

$path = Folder::addPathElement('/a/path/for', 'testing');
// $path は /a/path/for/testing となります
Folder::cd($path)
戻り値の型:string

カレントディレクトリを $path へ移動します。失敗時には false が返ります

$folder = new Folder('/foo');
echo $folder->path; // /foo が表示されます
$folder->cd('/bar');
echo $folder->path; // /bar が表示されます
$false = $folder->cd('/non-existent-folder');
Folder::chmod($path, $mode = false, $recursive = true, $exceptions = array ( ))
戻り値の型:boolean

ディレクトリのモード(パーミッション)を再帰的に変更します。ファイルのモードも同様に変更します。

$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, array('skip_me.php'));
Folder::copy($options = array ( ))
戻り値の型:boolean

ディレクトリを再帰的にコピーします。唯一のパラメータである $options にはコピー先のパスか、オプションの配列を指定します。

$folder1 = new Folder('/path/to/folder1');
$folder1->copy('/path/to/folder2');
// Will put folder1 and all its contents into folder2

$folder = new Folder('/path/to/folder');
$folder->copy(array(
    'to' => '/path/to/new/folder',
    'from' => '/path/to/copy/from', // will cause a cd() to occur
    'mode' => 0755,
    'skip' => array('skip-me.php', '.git')
));

$folder1 = new Folder('/path/to/folder1');
$folder1->copy('/path/to/folder2');
// folder1 以下のファイルを folder2 へコピーします

$folder = new Folder('/path/to/folder');
$folder->copy(array(
    'to' => '/path/to/new/folder',
    'from' => '/path/to/copy/from', // cd() が実行されるでしょう
    'mode' => 0755,
    'skip' => array('skip-me.php', '.git')
));
static Folder::correctSlashFor($path)
戻り値の型:string

$path に与えるべき適切なスラッシュを返します。 (Windows 環境では \ で、その他の環境では / )

Folder::create($pathname, $mode = false)
戻り値の型:boolean

ディレクトリを作成します。 /foo/bar/baz/shoe/horn のような深い階層の作成も可能です。

$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
    // フォルダ作成に成功した場合の処理
}
Folder::delete($path = NULL)
戻り値の型:boolean

システムが許可していた場合、再帰的にディレクトリを削除します。

$folder = new Folder('foo');
if ($folder->delete()) {
    // フォルダの削除が成功した場合の処理
}
Folder::dirsize()
戻り値の型:integer

フォルダとその中身のサイズを返します。

Folder::errors()
戻り値の型:array

最新のエラーを返します。

Folder::find($regexpPattern = '.*', $sort = false)
戻り値の型:array

現在のディレクトリで指定のパターンにマッチしたファイルを配列で返します。

// app/webroot/img/ フォルダ内の .png を検索し、ソートして返す
$dir = new Folder(WWW_ROOT . 'img');
$files = $dir->find('.*\.png', true);
/*
Array
(
    [0] => cake.icon.png
    [1] => test-error-icon.png
    [2] => test-fail-icon.png
    [3] => test-pass-icon.png
    [4] => test-skip-icon.png
)
*/

ノート

find メソッドと findRecursive メソッドは、ファイルのみを検索します。 フォルダとファイルを取得したい場合は、 Folder::read() もしくは Folder::tree() 参照してください。

Folder::findRecursive($pattern = '.*', $sort = false)
戻り値の型:array

パターンにマッチした全てのファイルをカレントディレクトリを付けて返します。

// test もしくは index で始まるファイルを再帰的に検索する
$dir = new Folder(WWW_ROOT);
$files = $dir->findRecursive('(test|index).*');
/*
Array
(
    [0] => /var/www/cake/app/webroot/index.php
    [1] => /var/www/cake/app/webroot/test.php
    [2] => /var/www/cake/app/webroot/img/test-skip-icon.png
    [3] => /var/www/cake/app/webroot/img/test-fail-icon.png
    [4] => /var/www/cake/app/webroot/img/test-error-icon.png
    [5] => /var/www/cake/app/webroot/img/test-pass-icon.png
)
*/
Folder::inCakePath($path = '')
戻り値の型:boolean

ファイルが CakePath の中に存在すれば true を返します。

Folder::inPath($path = '', $reverse = false)
戻り値の型:boolean

指定されたファイルが与えられたパスの中に存在すれば true を返します。

$Folder = new Folder(WWW_ROOT);
$result = $Folder->inPath(APP);
// $result = true, /var/www/example/app/ は /var/www/example/app/webroot/ に含まれる

$result = $Folder->inPath(WWW_ROOT . 'img' . DS, true);
// $result = true, /var/www/example/app/webroot/ は /var/www/example/app/webroot/img/ に含まれる
static Folder::isAbsolute($path)
戻り値の型:boolean

引数の $path が絶対パスであれば true を返します。

static Folder::isSlashTerm($path)
戻り値の型:boolean

引数の $path がスラッシュで終了していれば true を返します。 (つまり、 slash-terminated)

$result = Folder::isSlashTerm('/my/test/path');
// $result = false
$result = Folder::isSlashTerm('/my/test/path/');
// $result = true
static Folder::isWindowsPath($path)
戻り値の型:boolean

引数の $path が Windows のパスであれば true を返します。

Folder::messages()
戻り値の型:array

直近で利用したメソッドのメッセージを取得します。

Folder::move($options)
戻り値の型:boolean

再帰的なディレクトリの移動。

static Folder::normalizePath($path)
戻り値の型:string

引数の $path を適切なスラッシュに調整して返します。 (Windows 環境では \ で、その他の環境では / )

Folder::pwd()
戻り値の型:string

現在のパスを返します。

Folder::read($sort = true, $exceptions = false, $fullPath = false)
戻り値の型:

mixed

パラメタ:
  • $sort (boolean) – true の場合に結果をソートします。
  • $exceptions (mixed) – 無視するファイル名とフォルダ名の配列。 true もしくは ‘.’ が与えられた場合、隠しファイルもしくはドットファイルを無視します。
  • $fullPath (boolean) – true の場合に絶対パスで結果を返します。

現在のディレクトリのコンテンツを配列で返します。 戻り値は2つの配列となります。1つはディレクトリ名の配列。もう1つはファイル名の配列です。

$dir = new Folder(WWW_ROOT);
$files = $dir->read(true, array('files', 'index.php'));
/*
Array
(
    [0] => Array
        (
            [0] => css
            [1] => img
            [2] => js
        )
    [1] => Array
        (
            [0] => .htaccess
            [1] => favicon.ico
            [2] => test.php
        )
)
*/
Folder::realpath($path)
戻り値の型:string

引数のパス内にある ”..” の名前を解決したパスを返します。

static Folder::slashTerm($path)
戻り値の型:string

引数の $path に終端のスラッシュを付けたパスを返します。 (Windows 環境では \ で、その他の環境では / )

Folder::tree($path = NULL, $exceptions = true, $type = NULL)
戻り値の型:mixed

ディレクトリ一覧とその中のファイル一覧を返します。

File API

class File(string $path, boolean $create = false, integer $mode = 493)
// 0644 のパーミッションで新しいファイルを作成します
$file = new File('/path/to/file.php', true, 0644);
property File::$Folder

ファイルが属するフォルダ・オブジェクト

property File::$name

拡張子付きのファイル名。 似たような動作をする File::name() では、拡張子無しのファイル名を返します。

property File::$info

ファイル情報の配列。このプロパティよりも File::info() を使ってください。

property File::$handle

ファイルをオープンしている場合のファイルハンドラを保持します。

property File::$lock

ファイルの読み書き時のロックを有効にします。

property File::$path

現在のファイルの絶対パス。

File::append($data, $force = false)
戻り値の型:boolean

引数の文字列をファイルへ追記します。

File::close()
戻り値の型:boolean

ファイルがオープンされていた場合、そのファイルをクローズします

File::copy($dest, $overwrite = true)
戻り値の型:boolean

ファイルを $dest へコピーします。

File::create()
戻り値の型:boolean

ファイルを作成します。

File::delete()
戻り値の型:boolean

ファイルを削除します。

File::executable()
戻り値の型:boolean

ファイルに実行権限が付いていた場合に true を返します。

File::exists()
戻り値の型:boolean

ファイルが存在した場合に true を返します。

File::ext()
戻り値の型:string

ファイルの拡張子を返します。

File::Folder()
戻り値の型:Folder

現在のフォルダを返します。

File::group()
戻り値の型:integer

ファイルのグループを返します。

File::info()
戻り値の型:string

ファイル情報を返します。

バージョン 2.1 で変更: File::info() ファイルサイズと MIME タイプの情報が含まれるようになりました。

File::lastAccess()
戻り値の型:integer

最新のアクセス時間を返します。

File::lastChange()
戻り値の型:integer

最新の更新時間を返します。

File::md5($maxsize = 5)
戻り値の型:string

ファイルサイズを事前にチェックした上で、ファイルの md5 チェックサムを返します。(訳注:$maxsizeの単位はMB)

File::name()
戻り値の型:string

拡張子を省いたファイル名を返します。

File::offset($offset = false, $seek = 0)
戻り値の型:mixed

現在オープンしているファイルのオフセット値を設定または取得します。

File::open($mode = 'r', $force = false)
戻り値の型:boolean

現在のファイルを引数の $mode でオープンします。

File::owner()
戻り値の型:integer

ファイルのオーナーを返します。

File::perms()
戻り値の型:string

ファイルのパーミッションを返します。

static File::prepare($data, $forceWindows = false)
戻り値の型:string

ASCII 文字列をファイルへ書き出す事前処理を行います。現在の実行環境に合わせて改行文字を変換します。Windows なら”\r\n”を、その他の環境なら”\n”が利用されます。

File::pwd()
戻り値の型:string

ファイルのフルパスを返します。

File::read($bytes = false, $mode = 'rb', $force = false)
戻り値の型:mixed

ファイルの内容を文字列で返します。失敗時は false を返します。

File::readable()
戻り値の型:boolean

ファイルが読み出し可能な場合に true を返します。

File::safe($name = NULL, $ext = NULL)
戻り値の型:string

安全にセーブするために、ファイル名を変換します。(訳注:ホワイトスペース、ドット、ハイフンをアンダーバーへ変換)

File::size()
戻り値の型:integer

ファイルサイズを返します。

File::writable()
戻り値の型:boolean

ファイルが書き込み可能な場合に true を返します。

File::write($data, $mode = 'w', $force = false)
戻り値の型:boolean

引数のデータをファイルへ書き込みます。

バージョン 2.1 で追加: File::mime()

File::mime()
戻り値の型:mixed

ファイルのMIMEタイプを返します。失敗時には false を返します。