[CakePHP]file.phpの使い方

Fileオブジェクトを生成

<?php
uses('file');
$file = new File('/test/test.txt');
?>

新規作成*1

<?php
$file->create();
?>

ファイル読み込み

<?php
$ret = $file->read();
?>

ファイルの末尾に追記

<?php
$file->append('test!');
?>

ファイル書き込み(全て上書き)*2

<?php
$file->write('test!');
?>

ファイル削除

<?php
$file->delete();
?>

フルパスを取得

<?php
$path = $file->pwd();
?>

拡張子を除いたファイル名を取得

<?php
$name = $file->name();
?>

拡張子を取得

<?php
$ext = $file->ext();
?>

ファイル情報を取得*3

<?php
$info = $file->info();
?>

ファイルサイズを取得

<?php
$size = $file->size();
?>

最終アクセス日時(Unixタイムスタンプ)を取得

<?php
$lastAccess = $file->lastAccess();
?>

最終更新日時(Unixタイムスタンプ)を取得

<?php
$lastChange = $file->lastChange();
?>

ファイルが存在するか調べる

<?php
if(!$file->exists()) {
    echo 'ファイルが見つかりませんでした。';
}
?>

ファイルに読み込み権限があるか調べる

<?php
if(!$file->readable()) {
    echo 'ファイルに読み込み権限がありません。';
}
?>

ファイルに書き込み権限があるか調べる

<?php
if(!$file->writable()) {
    echo 'ファイルに書き込み権限がありません。';
}
?>

ファイルに実行権限があるか調べる

<?php
if(!$file->executable()) {
    echo 'ファイルに実行権限がありません。';
}
?>

ファイルのハッシュ値を取得する

<?php
$hash = $file->md5();
?>

親フォルダオブジェクトを取得する

<?php
$folder = $file->Folder();
?>

ファイルロックを使用する

<?php
$file->lock = true;
?>

safe()の使い方が謎

<?php
$name = $file->safe();
?>

以上のようにして危険文字をエスケープしたファイル名が取得できるが、オブジェクトのプロパティには反映されず。

create()は$this->pathからファイルを作成するので、$this->pathを変更してやらないといけない。

コンストラクタの第2引数にtrueを指定した場合にもsafe()は呼ばれているものの、$this->pathには反映せず…。

とりあえずエスケープはファイル名の段階でやらないとスラッシュがエスケープできないので無視することにする。

*1:代わりにコンストラクタの第2引数にtrueを渡しても良い

*2:明示的にファイルオープンするにはopen()を使いますが、そうでない場合は最初にファイルハンドラを生成した時のモードが維持維持されます。つまり、append()を呼び出し追記モードでオープンした場合、直後にwrite()を呼び出しても追記モードのままです。

*3pathinfo