狛ログ

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つずつループしてアップロードしていく必要があります。

  1. $config = array(
  2. 'upload_path' => './uploads/',
  3. 'allowed_types' => 'jpg|gif|png',
  4. 'overwrite' => true,
  5. );
  6.  
  7. foreach ($files['name'] as $key => $image) {
  8. $_FILES['images']['name']= $files['name'][$key];
  9. $_FILES['images']['type']= $files['type'][$key];
  10. $_FILES['images']['tmp_name']= $files['tmp_name'][$key];
  11. $_FILES['images']['error']= $files['error'][$key];
  12. $_FILES['images']['size']= $files['size'][$key];
  13. $config['file_name'] = $image;
  14. $this->upload->initialize($config);
  15. if ($this->upload->do_upload('images')) {
  16. $this->upload->data();
  17. } else {
  18. return false;
  19. }
  20. }

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


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


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

,

0 件のコメント:

コメントを投稿