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(); // 終了時にファイルをクローズしましょう
}
// 0755 のパーミッションで新しいフォルダを作成します
$dir = new Folder('/path/to/folder', true, 0755);
フォルダの現在のパス。 Folder::pwd()
は同じ情報を返します。
ファイルリストを取得する際に、名前によるソートを実行するか否かの値。
フォルダ作成時のモード。デフォルトでは 0755
。
Windows マシンでは何も影響しません。
string
$path と $element の間に適切なスラッシュを加えて返します。
$path = Folder::addPathElement('/a/path/for', 'testing');
// $path は /a/path/for/testing となります
バージョン 2.5 で追加: 2.5 から $element パラメータは配列も使用できます。
string
ディレクトリを $path へ移動します。失敗時には false が返ります。
$folder = new Folder('/foo');
echo $folder->path; // /foo が表示されます
$folder->cd('/bar');
echo $folder->path; // /bar が表示されます
$false = $folder->cd('/non-existent-folder');
boolean
ディレクトリのモード(パーミッション)を再帰的に変更します。 ファイルのモードも同様に変更します。
$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, array('skip_me.php'));
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'),
'scheme' => Folder::SKIP, // Skip directories/files that already exist.
'recursive' => true //set false to disable recursive copy
));
以下の3つの動作 (scheme) に対応します:
Folder::SKIP
コピー・移動先にファイルやディレクトリが既に存在している場合は、スキップします。
Folder::MERGE
コピー元とコピー先のディレクトリをマージします。コピー元のディレクトリにある
ファイルは、対象のディレクトリにあるファイルを置き換えます。ディレクトリの中身はマージされます。
Folder::OVERWRITE
対象のディレクトリに存在するファイルやディレクトリはコピー元の
ディレクトリの内容で上書きされます。対象とコピー先の両方にサブディレクトリが含まれる場合、
対象のディレクトリの内容は、コピー元の内容に削除や置き換えられます。
バージョン 2.3 で変更: copy()
にマージ、スキップ、上書きの動作 (scheme) が追加されました。
string
$path に与えるべき適切なスラッシュを返します。 (Windows のパスは '\' で、その他のパスは '/')
boolean
再帰的にディレクトリ構造を作成します。 /foo/bar/baz/shoe/horn のような深い階層の作成も可能です。
$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
// 入れ子になっているフォルダの作成に成功
}
boolean
システムが許可していた場合、再帰的にディレクトリを削除します。
$folder = new Folder('foo');
if ($folder->delete()) {
// foo とその入れ子になっているフォルダの削除に成功
}
integer
フォルダとその内容のサイズをバイト数で返します。
array
最新のエラーを返します。
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()
参照してください。
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
)
*/
boolean
ファイルが与えられた CakePath の中に存在すれば true を返します。
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/ に含まれる
boolean
与えられた $path が絶対パスであれば true を返します。
boolean
与えられた $path がスラッシュで終了していれば true を返します。(つまり、 slash-terminated)
$result = Folder::isSlashTerm('/my/test/path');
// $result = false
$result = Folder::isSlashTerm('/my/test/path/');
// $result = true
boolean
与えられた $path が Windows のパスであれば true を返します。
array
直近で利用したメソッドのメッセージを取得します。
boolean
(デフォルトで再帰的に) ディレクトリを移動します。 $options パラメータは copy()
のものと同じです。
string
与えられた $path を適切なスラッシュに調整して返します。 (Windows のパスは '\' で、その他のパスは '/')
string
現在のパスを返します。
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
)
)
*/
string
本当のパスを取得します(".." などを考慮して)
string
引数の $path に (Windows や、その他の OS で正しい) 終端のスラッシュを付けたパスを返します。
mixed
入れ子になったディレクトリと各ディレクトリ中のファイルの配列を返します。
// 0644 のパーミッションで新しいファイルを作成します
$file = new File('/path/to/file.php', true, 0644);
ファイルが属するフォルダ・オブジェクト
拡張子付きのファイル名。
拡張子なしのファイル名を返す File::name()
とは異なります。
ファイル情報の配列。代わりに File::info()
を使用してください。
ファイルをオープンしている場合のファイルハンドラを保持します。
ファイルの読み書き時のロックを有効にします。
現在のファイルの絶対パス。
boolean
与えられたデータ文字列を現在のファイルに追記します。
boolean
ファイルがオープンされていた場合、そのファイルをクローズします。
boolean
ファイルを $dest へコピーします。
boolean
ファイルを作成します。
boolean
ファイルを削除します。
boolean
ファイルが実行可能な場合に true を返します。
boolean
ファイルが存在する場合に true を返します。
string
ファイルの拡張子を返します。
integer
ファイルのグループを返します。エラーの場合は false を返します。
string
ファイル情報を返します。
バージョン 2.1 で変更: File::info()
ファイルサイズと MIME タイプの情報が含まれるようになりました。
integer
最終アクセス時刻を返します。エラーの場合は false を返します。
integer
最終更新時刻を返します。エラーの場合は false を返します。
string
ファイルサイズを事前にチェックした上で、ファイルの md5 チェックサムを取得します。 エラーの場合は false を取得します。
string
拡張子を省いたファイル名を返します。
mixed
現在オープンしているファイルのオフセット値を設定または取得します。
boolean
現在のファイルを与えられた $mode でオープンします。
integer
ファイルのオーナーを返します。
string
ファイルの "chmod" (パーミッション) を返します。
string
ASCII 文字列をファイルへ書き出す事前処理を行います。 現在の実行環境に合わせて改行文字を変換します。 Windows なら "\r\n" を、その他の環境なら "\n" が利用されます。
string
ファイルのフルパスを返します。
mixed
現在のファイルの内容を文字列で返します。失敗時は false を返します。
boolean
ファイルが読み出し可能な場合に true を返します。
string
保存するファイル名を安全にします。
integer
ファイルサイズを返します。
boolean
ファイルが書き込み可能な場合に true を返します。
boolean
与えられたデータを現在のファイルへ書き込みます。
バージョン 2.1 で追加: File::mime()
mixed
ファイルの MIME タイプを取得します。失敗時は false を取得します。
boolean
ファイル内のテキストを置換します。失敗時に false を返し、成功時に true を返します。
バージョン 2.5 で追加: File::replaceText()