複数の画像を配列で保存

%e7%84%a1%e9%a1%8c

<?php
if (isset($_FILES&#91;'upfile'&#93;&#91;'error'&#93;) && is_int($_FILES&#91;'upfile'&#93;&#91;'error'&#93;)){

  // 各ファイルをチェック
  foreach ($_FILES&#91;'upfile'&#93;&#91;'error'&#93; as $k => $error){

  try {

    if (!is_int($error)){
      throw new RuntimeException("[{$k}] パラメータが不正です");
    }
    // $_FILES['upfile']['error']の値を確認
    switch ($_FILES['upfile']['error']){
      case UPLOAD_ERR_OK:
        break;
      case UPLOAD_ERR_NO_FILE:
        throw new RuntimeException('ファイルが選択されていません');
      case UPLOAD_ERR_INI_SIZE:
      case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過
        throw new RuntimeException('ファイルサイズが大きすぎます');
      default:
        throw new RuntimeException('その他のエラーが発生しました');
    }

    // $_FILES['upfile']['mime']の値はブラウザ側で偽装可能なので
    // MIMEタイプを自前でチェックする
    if (!$info @getimagesize($_FILES['upfile']['tmp_name'][$k])){
      throw new RuntimeException("[{$k}] 有効な画像ファイルを指定してください");
    }
    if (!in_array($info[2], [IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG], true)){
      throw new RuntimeException("[{$k}] 未対応の画像形式です");
    }

    // 画像処理に使う関数名を決定する
    $create = str_replace('/', 'createfrom', $info['mime']);
    $output = str_replace('/', '', $info['mime']);

    // 縦横比を維持したまま、120*120 以下に収まるサイズを求める
    if ($info[0] >= $info[1]){
      $dst_w = 120;
      $dst_h = ceil(120 * $info[1] / max($info[0], 1));
    } else {
      $dst_w = ceil(120 * $info[0] / max($info[1], 1));
      $dst_h = 120;
    }

    // 元画像リソースの生成を試みる
    if (!$src = @$create($_FILES['upfile']['tmp_name'][$k])){
      throw new RuntimeException("[{$k}] 画像リソースの生成に失敗しました");
    }

    // リサンプリング先画像リソースを生成する
    $dst = imagecreatetruecolor($dst_w, $dst_h);

    // getimagesize関数で得られた情報も利用してリサンプリングを行う
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $info[0], $info[1]);

    // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、保存する
    if (!$output(
      $dst,
      sprintf('./resized/%s%s',
        sha1_file($_FILES['upfile']['tmp_name'][$k]),
        image_type_to_extension($info[2])
        )
      )) {
        throw new RuntimeException("[{$k}] ファイル保存時にエラーが発生しました");
      }

    $msgs[] = ['green', "[{$k}] リサイズして保存しました"];
  } catch (RuntimeException $e){
    $msgs = ['red', $e->getMessage()];
  }

  if (isset($img) && is_resource($img)){
    imagedestroy($img);
  }
  if (isset($dst) && is_resource($dst)){
    imagedestroy($dst);
  }
}
}

// XTHMLとしてブラウザに認識させる
// (IE8以外はサポート対象外)
header('Content-Type: application/xhtml+xml; charset=utf-8');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>画像アップロード</title>
</head>
<body>
<?php if (!empty($msgs)): ?>
  <ul>
<?php foreach ($msgs as $msg): ?>
    <li style="color:<?=$msg&#91;0&#93;?>;"><?=
    htmlspecialchars($msg&#91;1&#93;, ENT_QUOTES, 'UTF-8')
    ?></li>
<?php endforeach; ?>
  </ul>
<?php endif; ?>
  <form enctype="multipart/form-data" method="post" action="">
    <fieldset>
      <legend>画像ファイルを選択(GIF, JPEG, PNGのみ対応)</legend>
      <ul>
<?php for ($i = 0; $i < 10; $i++): ?>
      <li><input type="file" name="upfile&#91;&#93;" /></li>
<?php endfor; ?>
      </ul>
      <input type="submit" value="送信" />
    </fieldset>
  </form>
</body>
</html>