FuelPHP

FuelPHPのUploadクラス

更新日:

FuelPHPのUploadクラスは、HTMLフォームからアップロードされたファイルを安全に処理するためのクラスです。今日は、FuelPHPのUploadクラスについて調べてみたいと思います。

1. まず、Uploadクラスを利用するには、app/configフォルダにupload.php名でファイルを作成し、必要な設定項目を記述します。このファイルに記述することによりコアクラスの設定ファイルを変更することなく、指定した項目のみを変更することが可能です。下記に設定例を記述します。下記の例では、1枚最大サイズが2M以内のjpg、jpeg、gif、pngファイルのアップロードを許可します。

app/config/upload.php

return array(
 'max_size' =>  2097152,
 'ext_whitelist' => array('jpg','jpeg','gif','png'),
 );

Uploadクラスの設定項目

2. それでは、下記にUploadクラスの各設定項目を表示しておきます。

  • auto_precess
    Uploadクラス利用時に自動的に、process()メソッドを実行するかどうかを指定します。初期値(デフォルト)は、tureです。
  • max_sise
    1ファイルあたりの最大ファイルサイズをバイト単位で指定します。1キロ(K)は1024バイトとなりますので、1Mが『1048576 』、2Mが『2097152』となります。初期値は0です。0を指定すると上限無しとなります(但し、php.iniの設定に依存します)。
  • ext_whitelist
    アップロードを許可する拡張子を配列で指定します。初期値は、array()で、全ての拡張子が許可されています。
  • ext_blacklist
    アップロードを禁止する拡張子を配列で指定します。初期値は、array()で、ext_whitelistと同様に全ての拡張子が許可されています。
  • type_whitelist
    アップロードを許可するファイルタイプを配列で指定します。初期値は、array()で、全てのタイプを許可しています。
  • type_blacklist
    アップロードを禁止するファイルタイプを配列で指定します。初期値は、array()で、禁止しているタイプはありません。
  • mime_whitelist
    アップロードを許可するMIMEタイプを配列で指定します。初期値はarray()で、全てのMIMEタイプを許可しています。
  • mime_blacklist
    アップロードを禁止するMIMEタイプを配列で指定します。初期値はarray()で、禁止しているMIMEタイプはありません。
  • prefix
    アップロードファイルの保存時に常に特定の接頭辞を付加する場合に、指定します。初期値は''です。
  • suffix
    アップロードファイルの保存時に常に特定の接尾辞を付加する場合に指定します。初期値は''です。
  • extension
    アップロードファイルの保存時に常に拡張子を特定のもので置換する場合に指定します。初期値は''です。
  • path
    アップロードファイルを保存するパスを指定します。初期値は''です。
  • create_path
    指定されたパスを自動的に作成するかどうかを指定します。 初期値はtrueです。
  • path_chmod
    作成したファイルに設定するパーミッションを指定します。初期値は、0777です。
  • file_chmod
    保存したファイルに設定するパーミッションを指定します。 初期値は0666です。
  • auto_rename
    保存時に指定されたファイル名が同じパスに存在する場合に連番を付けてリネームするかどうかを指定します。初期値はtrueです。
  • overwrite
    保存時に指定されたファイル名が同じパスに存在する場合に上書き保存するかどうかを指定します。初期値はfalseです。
  • randomize
    アップロードファイルの保存時にMD5によるランダムな32文字のファイル名を付けるかどうかを指定します。初期値はfalseです。
  • normalize
    アップロードファイルの保存時にASCII文字のみのファイル名に変換するかどうかを指定します。初期値はfalseです。
  • change_case
    アップロードファイルの保存時にファイル名を大文字変換、又は小文字変換する角うをを指定します。初期値はfalseです。大文字変換時は、upper、小文字変換時はlowerを指定します。
  • max_length
    アップロードファイルの保存時にファイル名の最大文字数を指定指定します。初期値は0で、文字数制限をしない設定になっています。

アップロードしたファイルの配列

3. アップロードしたファイルの情報はアップロードされたクラス内の多次元配列に格納されています。

  • field
    ファイルをアップロードするために使用されたフォームフィールドの名前です。フォームフィールドが多次元配列だった場合、配列のキーは、コロンで区切られたフィールド名に追加されます。
  • name
    アップロードされたファイル名です。
  • type
    アップロードファイルのタイプです。
  • mimetype
    アップロードタイプのMIMEタイプです。
  • file
    アップロードファイルのファイル名です。
  • filename
    アップロードファイルのベース名です。
  • extention
    アップロードされたファイルの拡張子です。
  • size
    アップロードされたファイルのバイト単位のサイズです。
  • error
    アップロードしたファイルがエラーの場合はtrueが返されます。
  • errors
    アップロードしたファイルがエラーの場合、エラーコード及びエラーメッセージの配列が返されます。

4. save()メソッドを呼び出した後、下記の情報が展開されます。

  • saved_to
    アップロードファイルが保存された完全修飾パス
  • saved_as
    保存したファイル名
  • errors
    saved()メソッドを呼び出した後に更新されたエラー配列

 定義されているエラー定数

5. アップロードクラスには、下記のようなエラー定数があります。

  • UPLOAD_ERR_OK
    アップロードは成功しました。エラーはありません。
  • UPLOAD_ERR_UBU_SIZE
    アップロードしたファイルはphp.iniのupload_max_filesizeを超えています。
  • UPLOAD_ERR_FORM_SIZE
    アップロードしたファイルは、HTMLフォームで指定されたMAX_FILE_SIZEを超えています。
  • UPLOAD_ERR_PARTIAL
    部分的にしかアップロードされませんでした。
  • UPLOAD_ERR_NO_FILE
    ファイルをアップロードできませんでした。アップロードしたフィルのリストが処理されるときに、このエラーがフィルがリングされます。
  • UPLOAD_ERR_NO_TMP_DIR
    一時フォルダが見つかりません。
  • UPLOAD_ERR_CANT_WRITE
    ファイルをディスクに書き込み失敗しました。
  • UPLOAD_ERR_ETENSION
    アップロードしたファイルの拡張子が認識できませんので、ファイルのアップロードを停止しました。
  • UPLOAD_ERR_MAX_SIZE
    アップロードしたファイルはconfigで指定したファイル最大サイズを超えています。
  • UPLOAD_ERR_EXT_BLACKLISTED
    アップロードしたファイルの拡張子はブラックリストに定義されています。
  • UPLOAD_ERR_EXT_NOT_WHITELISTED
    アップロードしたファイルはホワイトリストに定義されていません。
  • UPLOAD_ERR_TYPE_BLACKLISTED
    アップロードしたファイルタイプがブラックリストに定義されています。
  • UPLOAD_ERR_TYPE_NOT_WHITELISTED
    アップロードしたファイルタイプがホワイトリストに定義されていません。
  • UPLOAD_ERR_MIME_BLACKLISTED
    アップロードしたファイルのMIMEタイプがブラックリストに定義されています。
  • UPLOAD_ERR_MIME_NOT_WHITELISTED
    アップロードしたファイルのMIME タイプがホワイトリストに定義されていません。
  • UPLOAD_ERR_MAX_FILENAME_LENGTH
    アップロードしたファイルが定義されている最大ファイル名を超えています。
  • UPLOAD_ERR_MOVE_FAILED
    アップロードしたファイル名が指定されたパスに一時的なストレージから移動できません。これは、パーミッションに問題があるかもしれません。
  • UPLOAD_ERR_DUPLICATE_FILE
    指定されたファイル名が既に存在していますので、アップロードファイルは保存できませんでした。

アップロードクラスのメソッド

6. アップロードクラスのメソッドには下記のような種類があります。

  • is_valid()
    is_valid()メソッドは、アップロードされたファイルが定義されている全ての検証に合格しているかどうかをtureか、falseで返します。
    使用例

    //もし全ての検証がOKなら
     if(Upload::is_valid()){
     //ファイルを保存します。
     Upload::save();
     }
  • get_files($index=null)
    get_files()メソッドは、指定したindex番号を持つアップロードしたファイルの多次元配列を返します。エラー値を含む場合はfalseを返します。
    使用例

    //正常にアップロードファイルの一覧を取得した場合
     foreach(Upload::get_files() as $file){
     //ファイル情報を使用した処理
     }
     //アップロード出来なかったindex番号の最初の情報を取得
     if( ! Upload::get_files(0)){
     //アップロードできなかった場合の処理
     }
  • get_errors($index=null)
    get_errors()メソッドは、index番号で指定したファイルでエラーステータスがtrueの全ての多次元配列を返します。
    使用例

    //アップロードにエラーしたファイルのリストを取得する
    foreach(Upload::get_errors() as file){
    //エラー情報ごとの処理
    }
    //フィールド名で最初のアップロードしたファイルを取得
    if( Upload::get_errors('new_image'){
    //エラー情報を取得したときの処理
    }
  • register($event,$callback)
    register()メソッドは、 特定のアップロードイベントに基づき、コールバックを登録することが出来ます。$eventには、'before'か'after'を指定します。
    使用例

    //クロージャを利用してコールバックの前に登録する
    Upload::register('before',function($file){ 
    //もしアップロードファイルにエラーがなければ
    if($file['error']==Upload::UPLOAD_ERR_OK)
    //ファイル拡張子が下記のケースの場合
    switch($file['extension'] ){
    case "jpg":
    case "png":
    case "gif": 
    //保存パスをimagesにセット
    $file['saved_to'].='images/'; 
    break;
    //ファイル拡張子がcssの場合
    case "css":
    //保存パスをcssにセット
    $file['saved_to'].='css/';
    break;
    //ファイル拡張子がjsの場合
    csse "js":
    //保存パスをjsにセット
     $file['saved_to'].='js/';
    break;
    default:
    //上記以外の処理をここに記述
    }
    }
    }
    );
  • process($config=array())
    process()メソッドは、全てのアップロードファイルに関する情報をフォームのフィールド名の異なる順列を正規化し、ファイルとそのMIMEタイプに関する追加情報を取得し、ファイルを検証します。設定ファイルで、auto_processが有効になっていれば、process()メソッドはコントローラで明示的に呼び出さなくても自動的に実行されます。
    使用例

    //配列内の条件に基づいてアップロードファイルを検証します
    Upload::process(array(
    'max_size'=> 10240,
    'auto_rename' => false,
    'overwrite' => true
    ));
  • save()
    save()メソッドは、全ての検証済みファイルを指定したパスに保存します。

本日は以上です。

-FuelPHP
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.