2016年8月11日木曜日

小石につまずくとけっこう痛い Codeigniter3 複数ファイル同時アップロード

オフィス狛 技術部です。

前回(小石につまずくとけっこう痛い Codeigniter3 ファイル命名規約)に引き続き、
今回も PHP ( Codeigniter3 )で地味につまずいたことを書こうと思います。

何度も言いますが
 Codeigniter は日本語の情報が少ない!!!
ということでよくつまずきます。

なので、自分の調べた備忘録も兼ねて、
ここにつまずきろく(記録)をためていきたいと思います。

今回は、
『 複数のファイルをまとめてアップロードする 』
です。

1つのファイルをアップロードする例は本家サイトにも載っているので割愛。
https://www.codeigniter.com/userguide3/libraries/file_uploading.html

何が困ったかというと、

1. そもそも複数のファイルデータってどうやってとるの?

2. アップロードメソッドに値ってどうやって設定するの?

という2点。


結論から言うと、どちらも単純な PHP の話。

1. そもそも複数のファイルデータってどうやってとるの?

<input name="images[]" type="file" />

であれば、

$_FILES['images']でファイルデータの配列が取れます。

2. アップロードメソッドに値ってどうやって設定するの?

アップロードメソッド( $this->upload->do_upload() )
は1つずつのアップロードしか対応していないようなので、
ファイルデータの配列から1つずつループしてアップロードしていく必要があります。

$config = array(
   'upload_path' => './uploads/',
   'allowed_types' => 'jpg|gif|png',
   'overwrite' => true,
);

foreach ($files['name'] as $key => $image) {
   $_FILES['images']['name']= $files['name'][$key];
   $_FILES['images']['type']= $files['type'][$key];
   $_FILES['images']['tmp_name']= $files['tmp_name'][$key];
   $_FILES['images']['error']= $files['error'][$key];
   $_FILES['images']['size']= $files['size'][$key];
   $config['file_name'] = $image;
   $this->upload->initialize($config);
   if ($this->upload->do_upload('images')) {
    $this->upload->data();
   } else {
    return false;
   }
}

1つ1つ値を設定し直してアップロードしていくだけの話でした。


フレームワークを使っているとデータを勝手に設定してくれたりするので、
『枠内』だけで考えてしまいがちになってしまう今日この頃。


足元の確認は大事ですね。

,

0 件のコメント:

コメントを投稿