Fuelphp-file-uploading

提供:Dev Guides
移動先:案内検索

FuelPHP-ファイルのアップロード

ファイルのアップロードは、フォームプログラミングで最も一般的に使用される機能の1つです。 FuelPHPは、ファイルのアップロードを処理する特別なクラス Upload を提供します。 この章のUploadクラスを使用してファイルをアップロードする方法を学びましょう。

設定

アップロードクラスは、個別の設定ファイル fuel/app/config/upload.php を使用して設定できます。 重要な構成エントリは次のとおりです-

  • max_size -アップロードするファイルの最大サイズを設定します。 「0」は無制限のアップロードサイズを示します
  • ext_whitelist -許可されるファイル拡張子を設定する
  • ext_blacklist -許可されていないファイル拡張子を設定する
  • type_whitelist -許可されるファイルタイプを設定します。 たとえば、MIMEタイプ「text/plain」の「text」
  • type_blacklist -許可されていないファイルタイプを設定する
  • mime_whitelist -許可されるMIMEファイルタイプを設定します。 たとえば、「text/plain」
  • mime_blacklist -許可されていないMIMEファイルタイプを設定する
  • prefix -アップロードされたファイルをサーバーに保存するときにファイル名にプレフィックスを付ける文字列
  • suffix -サーバーにアップロードされたファイルを保存する際のファイル名の接尾辞の文字列
  • extension -設定するアップロードされたファイルの拡張子
  • create_path -利用できない場合、ファイルパスを作成するかどうか
  • overwrite -アップロードされたファイルの保存中に既存のファイルを上書きするかどうか
  • auto_rename -アップロードされたファイルの保存中にシーケンス番号を追加してファイルの名前を変更するかどうか
  • randomize -アップロードされたファイルを保存するためにランダムな32文字の名前を作成するかどうか

アップロード方法

アップロードクラスは、ユーザーがアップロードしたファイルを処理および保存するオプションを提供します。 (保存する前に)処理されたすべてのファイルの結果配列には、次の情報が含まれます。

  • field -フォームフィールドの名前
  • name -アップロードされたファイルの名前
  • type -ブラウザによって定義されたファイルのタイプ
  • mimetype -Uploadクラスで定義されているファイルのタイプ
  • file -アップロードされたファイルの一時的な場所の完全修飾名
  • filename -アップロードされたファイルのファイル名
  • extension -アップロードされたファイルの拡張子
  • サイズ-アップロードされたファイルのサイズ(バイト単位)
  • errors -エラーコードとメッセージを持つエラーの配列
  • error -アップロードが失敗した理由で配列エラーを設定するかどうか(アップロードが失敗した場合)

ファイルがサーバーに保存されると、結果の配列にも次の情報が含まれます。

  • saved_to -アップロードされたファイルが保存された完全修飾パス
  • saved_as -保存されたファイルの名前
  • エラー-エラー配列を更新

それでは、Uploadクラスのメソッドを見てみましょう。

is_valid

有効なファイルがユーザーによってアップロードされた場合、is_validはtrueを返します。

//do we have any uploaded files to save?
if (Upload::is_valid()) {
  //process
}

get_files

get_filesは、アップロードされたすべてのファイルを多次元配列として返します。 フォームのファイル入力のインデックス/名前が指定されている場合、指定されたファイル入力のみに関連するアップロードされたファイルを返します。

foreach(Upload::get_files() as $file) {
  //do something with the file info
}
if ( Upload::get_files(0)) {
  //do something
}

get_errors

1つ以上のファイルのアップロードに失敗した場合、get_errorsはエラーの配列を返します。 フォームのファイル入力名のインデックス/名前が指定されている場合、指定されたファイル入力のみに関連するエラーを返します。

foreach(Upload::get_errors() as $file) {
  //do something with the file info
}
if (Upload::get_errors('myimage')) {
  //do something
}

プロセス

プロセスは、アップロードされたファイルに関する情報を収集する実際のプロセスを指します。 配列を使用して、新しいカスタム構成を提供できます。 設定が指定されていない場合、fuel/app/config/upload.phpで定義されている設定が使用されます

Upload::process (array(
   'auto_rename' => false,
   'overwrite'   => true
));

save

保存とは、すべての検証済みファイルを適切な場所に保存する実際のプロセスを指します。 特定のエントリのみを保存するようにインデックスを指定できます。

Upload::save();
Upload::save(0);
Upload::save(0, 3);

実施例

従業員サンプルに新しいコントローラーController_Uploadを作成して、アップロード機能をテストしましょう。

ステップ1 *-ファイル *fuel/app/classes/controller/upload.php を作成します。 アップロードコントローラーを作成します。

<?php
   class Controller_Upload extends Controller {
   }
  • ステップ2 *-新しいアクションget_uploadを作成します。
<?php
   class Controller_Upload extends Controller {
      public function get_index() {
         return \View::forge("upload/index");
      }
   }
  • ステップ3 *-作成したアクションの新しいビューを作成します。
<!DOCTYPE html>
<html>
   <body>

      <form action = "/upload/index" method = "post" enctype = "multipart/form-data">
         Select image to upload:
         <input type = "file" name = "fileToUpload" id = "fileToUpload">
         <input type = "submit" value = "Upload Image" name = "submit">
      </form>

   </body>
</html>
  • ステップ4 *-新しいアクションpost_actionを作成して、アップロードされたファイルを処理します。
<?php
   class Controller_Upload extends Controller {
      public function get_index() {
         return \View::forge("upload/index");
      }
      public function post_index(){
         $config = array(
            'path' => DOCROOT.'files',
            'randomize' => true,
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'),
         );
         Upload::process($config);
        //if there are any valid files

         if (Upload::is_valid()) {
            Upload::save();
            echo "success";
         } else {
           //and process any errors
            foreach (Upload::get_errors() as $file) {
               echo var_dump($file);
            }
         }
      }
   }

最後に、 http://localhost:8080/upload/index というURLをリクエストしてアプリケーションを実行し、ファイルのアップロードを試みます。

結果

ファイルのアップロード