Folder と File ユーティリティは、ファイルの読み書きやフォルダー内のファイル名一覧の取得、 その他ディレクトリーに関連するタスクにおいて便利なクラスです。
クラスがロードされていることを確認してください。
use Cake\Filesystem\Folder;
use Cake\Filesystem\File;
すると、新しいフォルダーインスタンスをセットアップすることができるようになります。
$dir = new Folder('/path/to/folder');
そして、そのフォルダー内から .php の拡張子が付いたファイルを 正規表現を使って検索できます。
$files = $dir->find('.*\.php');
これでファイルをループしたり、読み込み、内容の書き込み・追記、 ファイルの削除などが行えるようになります。
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 マシンでは何も影響しません。
$path と $element の間に適切なスラッシュを加えて返します。
$path = Folder::addPathElement('/a/path/for', 'testing');
// $path は /a/path/for/testing となります
$element は、配列も指定できます。
$path = Folder::addPathElement('/a/path/for', ['testing', 'another']);
// $path は /a/path/for/testing/another となります
ディレクトリーを $path へ移動します。失敗時には false
が返ります。
$folder = new Folder('/foo');
echo $folder->path; // /foo を表示
$folder->cd('/bar');
echo $folder->path; // /bar を表示
$false = $folder->cd('/non-existent-folder');
ディレクトリー構造のモードを再帰的に変更します。ファイルのモードも同様に変更します。
$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, ['skip_me.php']);
再帰的にディレクトリーをコピーします。 唯一のパラメーターである $options にはコピー先のパスか、オプションの配列を指定します。
$folder1 = new Folder('/path/to/folder1');
$folder1->copy('/path/to/folder2');
// folder2 の中に folder1 とその全ての内容を配置します
$folder = new Folder('/path/to/folder');
$folder->copy([
'to' => '/path/to/new/folder',
'from' => '/path/to/copy/from', // Will cause a cd() to occur
'mode' => 0755,
'skip' => ['skip-me.php', '.git'],
'scheme' => Folder::SKIP // 既存のディレクトリーやファイルはスキップ。
]);
以下の3つの動作 (scheme) に対応します。
Folder::SKIP
コピー・移動先にファイルやディレクトリーが既に存在している場合は、スキップします。
Folder::MERGE
コピー元とコピー先のディレクトリーをマージします。
コピー元のディレクトリーにある ファイルは、対象のディレクトリーにあるファイルを置き換えます。
ディレクトリーの中身はマージされます。
Folder::OVERWRITE
対象のディレクトリーに存在するファイルやディレクトリーはコピー元の
ディレクトリーの内容で上書きされます。対象とコピー先の両方にサブディレクトリーが含まれる場合、
対象のディレクトリーの内容は、コピー元の内容に削除や置き換えられます。
$path に与えるべき適切なスラッシュを返します。 (Windows のパスは '\' で、その他のパスは '/')
再帰的にディレクトリー構造を作成します。 /foo/bar/baz/shoe/horn のような深い階層の作成も可能です。
$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
// 入れ子になっているフォルダーの作成に成功
}
システムが許可していた場合、再帰的にディレクトリーを削除します。
$folder = new Folder('foo');
if ($folder->delete()) {
// foo とその入れ子になっているフォルダーの削除に成功
}
フォルダーとその内容のサイズをバイト数で返します。
直近で利用したメソッドのエラーを返します。
現在のディレクトリーでマッチしたファイルを配列で返します。
// 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()
参照してください。
現在のディレクトリー内とそれ以下のすべての一致するファイルの配列を返します。
// test もしくは index で始まるファイルを再帰的に検索する
$dir = new Folder(WWW_ROOT);
$files = $dir->findRecursive('(test|index).*');
/*
Array
(
[0] => /var/www/cake/webroot/index.php
[1] => /var/www/cake/webroot/test.php
[2] => /var/www/cake/webroot/img/test-skip-icon.png
[3] => /var/www/cake/webroot/img/test-fail-icon.png
[4] => /var/www/cake/webroot/img/test-error-icon.png
[5] => /var/www/cake/webroot/img/test-pass-icon.png
)
*/
ファイルが与えられた CakePath の中に存在すれば true
を返します。
ファイルが与えられたパスの中に存在すれば true
を返します。
$Folder = new Folder(WWW_ROOT);
$result = $Folder->inPath(APP);
// $result = false, /var/www/example/src/ は /var/www/example/webroot/ の中ではありません
$result = $Folder->inPath(WWW_ROOT . 'img' . DS, true);
// $result = true, /var/www/example/webroot/img/ は /var/www/example/webroot/ の中です
与えられた $path が絶対パスであれば true
を返します。
与えられた $path がスラッシュで終了していれば true を返します。(つまり、スラッシュ終端)
$result = Folder::isSlashTerm('/my/test/path');
// $result = false
$result = Folder::isSlashTerm('/my/test/path/');
// $result = true
与えられた $path が Windows のパスであれば true
を返します。
直近で利用したメソッドのメッセージを取得します。
再帰的にディレクトリーを移動。
与えられた $path を適切なスラッシュに調整して返します。 (Windows のパスは '\' で、その他のパスは '/')
現在のパスを返します。
現在のディレクトリーの内容を配列で返します。 戻り値は2つの配列となります。1つはディレクトリー名の配列。もう1つはファイル名の配列です。
$dir = new Folder(WWW_ROOT);
$files = $dir->read(true, ['files', 'index.php']);
/*
Array
(
[0] => Array // Folders
(
[0] => css
[1] => img
[2] => js
)
[1] => Array // Files
(
[0] => .htaccess
[1] => favicon.ico
[2] => test.php
)
)
*/
本当のパスを取得します(".." などを考慮して)
引数の $path に (Windows や、その他の OS で正しい) 終端のスラッシュを付けたパスを返します。
入れ子になったディレクトリーと各ディレクトリー中のファイルの配列を返します。
// 0644 のパーミッションで新しいファイルを作成します
$file = new File('/path/to/file.php', true, 0644);
ファイルが属するフォルダー・オブジェクト。
拡張子付きのファイル名。
拡張子なしのファイル名を返す File::name()
とは異なります。
ファイル情報の配列。
代わりに File::info()
を使用してください。
ファイルをオープンしている場合のファイルハンドラを保持します。
ファイルの読み書き時のロックを有効にします。
現在のファイルの絶対パス。
与えられたデータ文字列を現在のファイルに追記します。
ファイルがオープンされていた場合、そのファイルをクローズします。
ファイルを $dest へコピーします。
ファイルを作成します。
ファイルを削除します。
ファイルが実行可能な場合に true
を返します。
ファイルが存在する場合に true
を返します。
ファイルの拡張子を返します。
現在のフォルダーを返します。
ファイルのグループを返します。エラーの場合は false
を返します。
ファイル情報を返します。
最終アクセス時刻を返します。
最終更新時刻を返します。エラーの場合は false
を返します。
ファイルサイズを事前にチェックした上で、ファイルの md5 チェックサムを取得します。
エラーの場合、 false
を取得します。
拡張子を省いたファイル名を返します。
現在オープンしているファイルのオフセット値を設定または取得します。
現在のファイルを与えられた $mode でオープンします。
ファイルのオーナーを返します。
ファイルの "chmod" (パーミッション) を返します。
ASCII 文字列をファイルへ書き出す事前処理を行います。 現在の実行環境に合わせて改行文字を変換します。 Windows なら "\r\n" を、その他の環境なら "\n" が利用されます。
ファイルのフルパスを返します。
現在のファイルの内容を文字列で返します。失敗時は false
を返します。
ファイルが読み出し可能な場合に true
を返します。
保存するファイル名を安全にします。
ファイルサイズをバイト数で返します。
ファイルが書き込み可能な場合に true
を返します。
与えられたデータを現在のファイルへ書き込みます。
ファイルの MIME タイプを取得します。失敗時は false
を取得します。
ファイル内のテキストを置換します。
失敗時に false
を返し、成功時に true
を返します。