Folder & File

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

基本的な使用法

クラスがロードされていることを確認してください。

use Cake\Filesystem\Folder;
use Cake\Filesystem\File;

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

$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 Cake\Filesystem\Folder(string $path = false, boolean $create = false, string|boolean $mode = false)
// 0755 のパーミッションで新しいフォルダを作成します
$dir = new Folder('/path/to/folder', true, 0755);
property Cake\Filesystem\Folder::$path

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

property Cake\Filesystem\Folder::$sort

リストを取得する際に、名前によるソートを実行するかどうか。

property Cake\Filesystem\Folder::$mode

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

static Cake\Filesystem\Folder::addPathElement(string $path, string $element)

$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 となります
Cake\Filesystem\Folder::cd($path)

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

$folder = new Folder('/foo');
echo $folder->path; // /foo を表示
$folder->cd('/bar');
echo $folder->path; // /bar を表示
$false = $folder->cd('/non-existent-folder');
Cake\Filesystem\Folder::chmod(string $path, integer $mode = false, boolean $recursive = true, array $exceptions = [])

ディレクトリ構造のモードを再帰的に変更します。ファイルのモードも同様に変更します。

$dir = new Folder();
$dir->chmod('/path/to/folder', 0755, true, ['skip_me.php']);
Cake\Filesystem\Folder::copy(array|string $options = [])

再帰的にディレクトリをコピーします。 唯一のパラメータである $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 対象のディレクトリに存在するファイルやディレクトリはコピー元の ディレクトリの内容で上書きされます。対象とコピー先の両方にサブディレクトリが含まれる場合、 対象のディレクトリの内容は、コピー元の内容に削除や置き換えられます。
static Cake\Filesystem\Folder::correctSlashFor(string $path)

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

Cake\Filesystem\Folder::create(string $pathname, integer $mode = false)

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

$folder = new Folder();
if ($folder->create('foo' . DS . 'bar' . DS . 'baz' . DS . 'shoe' . DS . 'horn')) {
    // 入れ子になっているフォルダの作成に成功
}
Cake\Filesystem\Folder::delete(string $path = null)

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

$folder = new Folder('foo');
if ($folder->delete()) {
    // foo とその入れ子になっているフォルダの削除に成功
}
Cake\Filesystem\Folder::dirsize()

フォルダとその内容のサイズをバイト数で返します。

Cake\Filesystem\Folder::errors()

直近で利用したメソッドのエラーを返します。

Cake\Filesystem\Folder::find(string $regexpPattern = '.*', boolean $sort = false)

現在のディレクトリでマッチしたファイルを配列で返します。

// 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() 参照してください。

Cake\Filesystem\Folder::findRecursive(string $pattern = '.*', boolean $sort = false)

現在のディレクトリ内とそれ以下のすべての一致するファイルの配列を返します。

// 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
)
*/
Cake\Filesystem\Folder::inCakePath(string $path = '')

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

Cake\Filesystem\Folder::inPath(string $path = '', boolean $reverse = false)

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

$Folder = new Folder(WWW_ROOT);
$result = $Folder->inPath(APP);
// $result = true, /var/www/example/ は /var/www/example/webroot/ の中です

$result = $Folder->inPath(WWW_ROOT . 'img' . DS, true);
// $result = true, /var/www/example/webroot/ は /var/www/example/webroot/img/ の中です
static Cake\Filesystem\Folder::isAbsolute(string $path)

与えられた $path が絶対パスであれば true を返します。

static Cake\Filesystem\Folder::isSlashTerm(string $path)

与えられた $path がスラッシュで終了していれば true を返します。(つまり、スラッシュ終端)

$result = Folder::isSlashTerm('/my/test/path');
// $result = false
$result = Folder::isSlashTerm('/my/test/path/');
// $result = true
static Cake\Filesystem\Folder::isWindowsPath(string $path)

与えられた $path が Windows のパスであれば true を返します。

Cake\Filesystem\Folder::messages()

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

Cake\Filesystem\Folder::move(array $options)

再帰的にディレクトリを移動。

static Cake\Filesystem\Folder::normalizePath(string $path)

与えられた $path を適切なスラッシュに調整して返します。 (Windows のパスは ‘\’ で、その他のパスは ‘/’)

Cake\Filesystem\Folder::pwd()

現在のパスを返します。

Cake\Filesystem\Folder::read(boolean $sort = true, array|boolean $exceptions = false, boolean $fullPath = false)

現在のディレクトリの内容を配列で返します。 戻り値は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
        )
)
*/
Cake\Filesystem\Folder::realpath(string $path)

本当のパスを取得します(”..” などを考慮して)

static Cake\Filesystem\Folder::slashTerm(string $path)

引数の $path に (Windows や、その他の OS で正しい) 終端のスラッシュを付けたパスを返します。

Cake\Filesystem\Folder::tree(null|string $path = null, array|boolean $exceptions = true, null|string $type = null)

入れ子になったディレクトリと各ディレクトリ中のファイルの配列を返します。

File API

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

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

property Cake\Filesystem\File::$name

拡張子付きのファイル名。 拡張子なしのファイル名を返す File::name() とは異なります。

property Cake\Filesystem\File::$info

ファイル情報の配列。 代わりに File::info() を使用してください。

property Cake\Filesystem\File::$handle

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

property Cake\Filesystem\File::$lock

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

property Cake\Filesystem\File::$path

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

Cake\Filesystem\File::append(string $data, boolean $force = false)

与えられたデータ文字列を現在のファイルに追記します。

Cake\Filesystem\File::close()

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

Cake\Filesystem\File::copy(string $dest, boolean $overwrite = true)

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

Cake\Filesystem\File::create()

ファイルを作成します。

Cake\Filesystem\File::delete()

ファイルを削除します。

Cake\Filesystem\File::executable()

ファイルが実行可能な場合に true を返します。

Cake\Filesystem\File::exists()

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

Cake\Filesystem\File::ext()

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

Cake\Filesystem\File::Folder()

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

Cake\Filesystem\File::group()

ファイルのグループを返します。エラーの場合は false を返します。

Cake\Filesystem\File::info()

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

Cake\Filesystem\File::lastAccess()

最終アクセス時刻を返します。

Cake\Filesystem\File::lastChange()

最終更新時刻を返します。エラーの場合は false を返します。

Cake\Filesystem\File::md5(integer|boolean $maxsize = 5)

ファイルサイズを事前にチェックした上で、ファイルの md5 チェックサムを取得します。 エラーの場合、 false を取得します。

Cake\Filesystem\File::name()

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

Cake\Filesystem\File::offset(integer|boolean $offset = false, integer $seek = 0)

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

Cake\Filesystem\File::open(string $mode = 'r', boolean $force = false)

現在のファイルを与えられた $mode でオープンします。

Cake\Filesystem\File::owner()

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

Cake\Filesystem\File::perms()

ファイルの “chmod” (パーミッション) を返します。

static Cake\Filesystem\File::prepare(string $data, boolean $forceWindows = false)

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

Cake\Filesystem\File::pwd()

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

Cake\Filesystem\File::read(string $bytes = false, string $mode = 'rb', boolean $force = false)

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

Cake\Filesystem\File::readable()

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

Cake\Filesystem\File::safe(string $name = null, string $ext = null)

保存するファイル名を安全にします。

Cake\Filesystem\File::size()

ファイルサイズをバイト数で返します。

Cake\Filesystem\File::writable()

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

Cake\Filesystem\File::write(string $data, string $mode = 'w', boolean$force = false)

与えられたデータを現在のファイルへ書き込みます。

Cake\Filesystem\File::mime()

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

Cake\Filesystem\File::replaceText($search, $replace)

ファイル内のテキストを置換します。 失敗時に false を返し、成功時に true を返します。