11月 142012
 

FuelPHPのFileクラス

こんばんは。ファガイです。本日はFuelPHPのFileクラスについてまとめています。

書いている途中で、ファイルハンドラの存在の確認と、ファイルハンドラのページが日本語化されていて少しやる気を落としましたが、書ききった。

今回は長いので、インデックスを用意しています。公式ドキュメントのFileクラスにほぼ準拠した状態で書いているので、日本語ドキュメントへの対応をしても良かったのではないかと思ってしまっていたりする・・・。

Index

 

createメソッド

ファイルを作成するには、createメソッドを使用します。

create($bathpath, $name, $contents=null, $area=null)
第1引数:作成するファイルのベースパスを指定します。(必須)
第2引数:作成するファイルの名前を指定します。(必須)
第3引数:ファイルの中身を指定します。
第4引数:areaオブジェクトというものを使うらしいですが分からないので省略。
参考:高度な利用法

戻り値はtrue。

File::create(DOCROOT, 'test.txt', 'コンテンツです。');

 

create_dirメソッド

ディレクトリを作成するには、create_dirメソッドを使用します。

create_dir($basepath, $name, $chmod=0777, $area=null)
第1引数:作成するディレクトリのベースパスを指定します。(必須)
第2引数:作成するディレクトリの名前を指定します。(必須)
第3引数:ディレクトリのパーミッションを指定します。
第4引数:Areaオブジェクト。やっぱり分からない。

戻り値は、bool。どうやらPHP関数のmkdir()を使っているとのこと。

File::create_dir(DOCROOT, 'test', 0755);

 

readメソッド

ファイルの中身を読み込む際には、readメソッドを使用します。

read($path, $as_string=false, $area=null)
第1引数:読みたいパスを指定します。(必須)
第2引数:使用するメソッドで、readfileメソッドを使う場合はfalse,file\_get\_contentsメソッドを使う時にはtrueを指定します。
第3引数:areaオブジェクト。

例:

$file_content = File::read(DOCROOT, 'test.txt', true);

createメソッドの項目でファイルを作っていた場合、$file_content変数には、’コンテンツです。’が入ります。

第2引数のas_stringなのですが、主にtrueを使用すると思います。falseのreadfileメソッドは、戻り値にバイト数(int)を返し、標準出力でファイルを出力することになっています。
例えば、強制的にそのファイルをDLさせる等に使用することができます。
(as_stringの値によって戻り値の型が変わるので注意。)

 

read_dirメソッド

ディレクトリの中身を読み込む際には、read_dirメソッドを使用します。(php標準のreaddirとは違います。読み込むという点は同じですが・・・)

read_dir($path, $depth=0, $filter=null, $area=null)
第1引数:読み込むディレクトリを指定します。(必須)
第2引数:フォルダを検索する深さ。0であれば無制限に検索する。
第3引数:連想配列でフィルタを指定します。正規表現で書く。nullや、空のArrayを指定するとすべてのファイルを取得します。
第4引数:areaオブジェクト。

戻り値は基本的に連想配列で返ります。色々とソートの方法や、keyとvalueの付け方がまちまちなので、これは慣れるしか無いです。
現在分かってる点は、

・ナチュラルソートがされる。
・ファイルのkeyには番号が振られる。valueがファイル名。
・階層を指定した時、設定した階層以下に階層があった場合はそのディレクトリのvalue値がfalseになる。
・ディレクトリの中に何も入っていないときは空のarrayが入る。

といった所。

例(ディレクトリ状況。今回はDOCROOT以下にこのフォルダがあるとする)

sample/
  private/
  _sample/
  css/
    sample.css
  img/
    base/
      logo.png
    sample.jpg
    sample.png
    sample.gif
  js/
    sample.js
aaa.png

例(ソース)

$contents = File::read_dir(DOCROOT . 'sample', 0, array(
    '!^\.', //先頭文字が.で始まらないものを取得する(file/dir)
    '!^_', //先頭文字が_で始まらないものを取得する(file/dir)
    '!^private' => 'dir', //先頭文字列がprivateで始まらないものを取得(dir)
     '\.png$' => 'file', //末尾文字列が.pngで始まるものを取得(file)
));
Debug::dump($contents);

結果

Variable #1:
  (Array, 4 elements) ↵
     css\ (Array, 0 elements)
     img\ (Array, 2 elements) ↵
         base\ (Array, 1 element) ↵
         0 (String): "sample.png" (10 characters)
     js\ (Array, 0 elements)
     0 (String): "aaa.png" (7 characters)

ややこしい点:この状態で、「.png」というファイル名で作成して確認すると、そのファイルを読み込むことはありませんでした。書いてる順番で優先度があるのか調べましたが、結果は同様。現状では、否定的(!)なものが優先されているように見えます。

 

updateメソッド

ファイルをアップデートするメソッドです。

update($basepath, $name, $contents = null, $area = null)
第1引数:ファイルがあるディレクトリのパスを指定する。(必須)
第2引数:ファイル名を指定する。ない場合は新規作成される。(必須)
第3引数:ファイルの内容を指定する。
第4引数:areaオブジェクト。

アップデートに成功した場合はtrueが返ります。createメソッドとほぼ同様ですね。

File::update(DOCROOT, 'test.txt', 'New contents for file.');

 

appendメソッド

appendメソッドは殆どupdateメソッドと同様です。
異なる点は、

・第2引数のファイル名は存在しなくてはいけません。
・第3引数のコンテンツは「追加」になります。

File::append(DOCROOT, 'test.txt', 'Additional contents for file.');

 

renameメソッド

名前の通りリネームするためのメソッドです。

rename($path, $new_path, $area = null)
第1引数:リネーム元のファイルまたはフォルダをパスを指定します。(必須)
第2引数:リネーム後のパスを指定します。(必須)
第3引数:areaオブジェクトです。

戻り値はphp標準関数のrename()に従います。

File::rename(DOCROOT . 'text.txt', DOCROOT . 'folder/newname.txt');

この場合だと、text.txtをfolderというサブディレクトリ内にnewname.txtという名前でリネームすることになります。

 

rename_dirメソッド(基本使わないだろう)

ディレクトリの名前を変更するメソッドです。また、File::renameのエイリアスになっています。
引数等は同じです。

File::rename_dir(DOCROOT . '/dirname', DOCROOT . '/rewdirname');

これを何故作っているのか分からないですが、互換性か何かでしょう。ドキュメントの方も何かまちまちでしたので。

 

copyメソッド

ファイルをコピーする際はcopyメソッドを使用します。

copy($path, $new_path, $area = null)
第1引数:ファイルのパスを指定します。(必須)
第2引数:新しいファイルのパスを指定します。(必須)
第3引数:areaオブジェクト。

File::copy(DOCROOT . 'test.txt', DOCROOT . 'folder/test.txt');

戻り値はPHP標準関数のcopy()と同様です。基本的にbooleam型。

 

copy_dirメソッド

ディレクトリをコピーするときには、copy_dirメソッドを使用します。

copy_dir($path, $new_path, $area = null)
第1引数:コピーするディレクトリのパスを指定します。(必須)
第2引数:コピー先のディレクトリのパスを指定します。(必須)
第3引数:areaオブジェクト。

File::copy_dir(DOCROOT . '/test', DOCROOT . '/newname');

戻り値はこちらもcopy()と同様です。

 

deleteメソッド

ファイルを削除する際は、deleteメソッドを使用します。

delete($path, $area = null)
第1引数:削除するファイルパスを指定します。(必須)
第2引数:areaオブジェクトです。

File::delete(DOCROOT . '/test.txt');

戻り値は、PHP標準関数のunlink()メソッドにあたります。boolean型です。

 

delete_dirメソッド

ディレクトリを削除する際は、delete_dirメソッドを使用します。

delete_dir($path, $recursive = true, $delete_top = true, $area = null)
第1引数:削除するディレクトリのパスを指定します。
第2引数:サブディレクトリの内容を削除するかどうか。
第3引数:そのディレクトリが空であれば親のディレクトリも削除するかどうか。
第4引数:areaオブジェクトです。

File::delete_dir(DOCROOT.'/my_dir');

戻り値はboolean型で返ります。

 

open_fileメソッド

ファイルをオープンするメソッドです。ロックが出来ます。

open_file($path, $lock = true, $area = null)
第1引数:開くファイルのパスを指定します。(必須)
第2引数:ロックをするかどうかを指定します。
第3引数:areaオブジェクト。

$resource = File::open_file(DOCROOT . '/my_dir/text.txt');

戻り値はresouceが返ってきます。

 

close_fileメソッド

ファイルをクローズするメソッドです。open_fileメソッドの戻り値であるresouceが必要になります。

close_file($resource, $area = null)
第1引数:ファイルを開いているリソースを指定します。(必須)
第2引数:areaオブジェクトです。

戻り値はboolean型です。

$resource = File::open_file(DOCROOT.'/my_dir/text.txt');
// リソースを使って何かの操作を行う。
File::close_file($resource);

 

getメソッド

ファイルやディレクトリをファイルハンドラとして読み込みます。ファイルハンドラに関しては、ファイルハンドラ FulePHP日本語化ドキュメントが詳しいです。

get($path, $config = array(), $area = null)
第1引数:ファイルハンドラとするディレクトリまたはファイルのパス
第2引数:わからないです。
第3引数:areaオブジェクト

$handler = File::get(DOCROOT.'/my_dir/text.txt');

 

get_urlメソッド

ファイルが表示されるURLを取得します。

get_url($path, $config = array(), $area = null)
第1引数:ファイルのパスを指定します。(必須)
第2引数:分からないです。
第3引数:areaオブジェクト

$url = File::get_url(DOCROOT.'/my_dir/text.txt');
// http://localhost/name/mydir/text.txt

 

get_permissionsメソッド

ファイルまたはディレクトリのパーミッションを取得します。

get_permissions($path, $area = null)
第1引数:ファイルまたはディレクトリのパスを指定します。(必須)
第2引数:areaオブジェクト。

$permissions = File::get_permissions(DOCROOT . 'my_dir/text.txt');
// 0755

 

get_timeメソッド

ファイルまたはディレクトリの作成時間、または更新時間を取得します。

get_time($path, $type = 'modified', $area = null)
第1引数:ファイルまたはディレクトリのパスを指定します。(必須)
第2引数:created(作成時間)またはmodified(更新時間)を指定します。
第3引数:areaオブジェクト。

戻り値は、unixタイムスタンプです。

$permissions = File::get_time(DOCROOT.'/my_dir/text.txt', 'created');

 

get_sizeメソッド

ファイルのサイズを取得します。(byte)

第1引数:ファイルのパスを指定します。(必須)
第2引数:areaオブジェクトです。

$filesize = File::get_size(DOCROOT.'/my_dir/text.txt');

 

file_infoメソッド

ファイルに関する情報を配列で取得します。

第1引数:ファイルのパスを指定します。(必須)
第2引数:areaオブジェクト。

例(今回はたまたまindex.phpがあったのでそれを指定しています。)

$filesize = File::file_info(DOCROOT . 'index.php');
Debug::dump($filesize);

結果

Variable #1:
  (Array, 12 elements) ↵
     original (String): "C:\Users\ユーザ名\phpwork\アプリケーション名\public\index.php" (53 characters)
     realpath (String): "C:\Users\ユーザ名\phpwork\アプリケーション名\public\index.php" (53 characters)
     dirname (String): "C:\Users\ユーザ名\phpwork\アプリケーション名\public" (43 characters)
     basename (String): "index.php" (9 characters)
     filename (String): "index" (5 characters)
     extension (String): "php" (3 characters)
     mimetype (String): "text/x-php" (10 characters)
     charset (String): "us-ascii" (8 characters)
     size (Integer): 1739
     permissions (String): "0666" (4 characters)
     time_created (Integer): 1351865381
     time_modified (Integer): 1351865381

 

downloadメソッド

ファイルをダウンロードさせる際に使います。
PHP標準関数のreadfileメソッドをダウンロード向けにしたような感じですね。

download($path, $name = null, $mime = null, $area = null)
第1引数:ファイルのパスを指定します。(必須)
第2引数:ファイルの名前を指定します。指定なしであればデフォルトを使います。
第3引数:ファイルのmimetypeを指定します。指定なしであればデフォルトを使います。
第4引数:areaオブジェクトです。

File::download(DOCROOT . 'index.php', 'newfile.php');

とても長い・・・・。
私の場合、まずmarkdown形式で書いて、その後ハイライターが効く形に書き直しているのですが、やはり雑な所が良く分かる結果になりました。
今度からは重要なメソッドだけ書くことにします・・・w

Pocket

 Posted by at 10:06 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*