Salvar múltiplas fotos e/ou PDFs no mesmo input, erro ao salvar os arquivos

Olá!

Eu estou trabalhando um código que faz um upload de uma foto ou PDF pra salvar numa pasta renomeando as imagens com a extensão JPG e renomeando e mantendo PDF com sua extensão. Essa parte até que conseguir, depois me pedira para implementar selecionar e salvar múltiplos arquivos. Na parte de selecionar foi fácil, o problema é na hora de salvar os múltiplos arquivos que estava salvando somente o último selecionado.

Eu pesquisei na internet uma possível solução e vi que precisava implementar um FOR no código para fazer verificação de todos os arquivos, mas preciso que salve e qualquer quantidade. Exemplo: seleciono 6 fotos e dou upload, depois seleciono mais 8 e dou upload de novo.

Eu tive que readaptar o código, mas por enquanto eu coloquei número fixo de 10 arquivos selecionados e tá dando erro Undefined offset.

Para ter ideia, segue o código HTML.

<div><label for="image_file">Selecione o arquivo de imagem</label></div>
<div><input type="file" name="image_file[]" id="image_file" accept="image/*,application/pdf" multiple required onchange="fileSelected();" class="form-control" /></div>
</br>
<button type="button" ng-click="startUploading()" class="btn btn-info btn-s">
  <span class="icon-cloud-upload mr"></span>Upload
</button>

Agora o código PHP atual:
<?php

//Pega o id do usuário logado
$id_url = $_GET['id'];

// Numero de campos de upload
$numeroCampos = 10;

// Tamanho máximo do arquivo (em bytes)
$tamanhoMaximo = 1024*1024*2;

// Extensões aceitas
$extensoes = array(".doc", ".txt", ".pdf", ".docx");

//Local da pasta
$_UP['pasta'] = '../upload/';

for ($i = 0; $i < $numeroCampos; $i++) {
   // Informações do arquivo enviado
  $sFileName = $_FILES['image_file']['name'][$i];
  $sFileSize = $_FILES['image_file']['size'][$i];
  $nomeTemporario = $_FILES['image_file']['tmp_name'][$i];
  // Verifica se o arquivo foi colocado no campo
  if (!empty($sFileName)) {
    $erro = false;
    // Verifica se o tamanho do arquivo é maior que o permitido
    if ($sFileSize > $tamanhoMaximo) {
        $erro = "O arquivo " . $sFileName . " não deve ultrapassar " . $tamanhoMaximo. " bytes";
    }
    // Verifica se a extensão está entre as aceitas
    elseif (!in_array(strrchr($sFileName, "."), $extensoes)) {
        $erro = "A extensão do arquivo <b>" . $sFileName . "</b> não é válida";
    }
    // Verifica se o arquivo existe e se é para substituir
    elseif (file_exists($_UP['pasta'] . $sFileName) and !$substituir) {
        $erro = "O arquivo <b>" . $sFileName . "</b> já existe";
    }
    else{
      //Pega a extensão do arquivo
      $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION);
      // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
      // Primeiro verifica se deve trocar o nome do arquivo  
      $unixTime = time();
      $timeZone = new \DateTimeZone('America/Sao_Paulo');
      $time = new \DateTime();
      $time->setTimestamp($unixTime)->setTimezone($timeZone);
      $formattedTime = $time->format('d-m-Y_l_h-i-s-a');
      $aleatorio = rand();
      if($TipoExtensao == 'pdf'){
        $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf';
      }else{  
        $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg';
      }
      // Depois verifica se é possível mover o arquivo para a pasta escolhida
      if (move_uploaded_file($nomeTemporario, $_UP['pasta'] . $nome_final)) {
        // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo
        echo "Upload efetuado com sucesso!";
      } else {
        // Não foi possível fazer o upload, provavelmente a pasta está incorreta
        echo "Não foi possível enviar o arquivo, tente novamente";
      }  
    }
  }
}
echo <<<EOF
<p></p>
EOF;

O $id_url = $_GET[‘id’]; do upload.php pega o id do usuário no qual é lido no oXHR.open(‘POST’, ‘app/views/upload.php?id=’+buscarID); que está no arquivo javascript. O id vai ser utilizado pra renomear o arquivo de imagem ou PDF.

O $_UP[‘pasta’] = ‘…/upload/’; especifica o local onde a imagem vai ser salva.

O $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION); pega o tipo de extensão do arquivo e é utilizado no if($TipoExtensao == ‘pdf’){

No mais, eu preciso que salve não uma, mas varias fotos e/ou PDFs de uma vez. Alguém pode me ajudar?

Bom no final eu conseguir fazer e utilizei o EOF pra achar os erros e ter noção do que o código faz, além de claro conseguir salvar varias imagens de formatos diferentes mais PDF ao mesmo tempo. No código renomeia todos os arquivos mantendo o formato PDF e colocando todas as imagens em JPG. Código pronto e concluído.

<?php

function bytesToSize1024($bytes, $precision = 2) {

  $unit = array('B','KB','MB');

  return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i];

}

//Pega o id do usuário logado

$id_url = $_GET['id'];

// Numero de campos de upload

$numeroCampos = count($_FILES['image_file']['name']);

// Tamanho máximo do arquivo (em bytes)

$tamanhoMaximo = 1024*1024*2;

// Extensões aceitas

$extensoes = array(".jpg", "jpeg", ".gif", ".png", ".pdf", ".bmp", ".pdf", ".tiff");

//Local da pasta

$_UP['pasta'] = '../upload/';

$substituir = false;

for ($i = 0; $i < $numeroCampos; $i++) {

   // Informações do arquivo enviado

  $sFileName = $_FILES['image_file']['name'][$i];

  $sSize = $_FILES['image_file']['size'][$i];

  $sFileSize = bytesToSize1024($sSize, 1);

  $nomeTemporario = $_FILES['image_file']['tmp_name'][$i];

  // Verifica se o arquivo foi colocado no campo

  if (!empty($sFileName)) {

   

    $erro = false;

    // Verifica se o tamanho do arquivo é maior que o permitido

    if ($sSize > $tamanhoMaximo) {

        $erro = "O arquivo " . $sFileName . " não deve ultrapassar " . $tamanhoMaximo. " bytes";

    }

    // Verifica se a extensão está entre as aceitas

    elseif (!in_array(strrchr($sFileName, "."), $extensoes)) {

        $erro = "A extensão do arquivo <b>" . $sFileName . "</b> não é válida";

    }

    // Verifica se o arquivo existe e se é para substituir

    elseif (file_exists($_UP['pasta'] . $sFileName) and !$substituir) {

        $erro = "O arquivo <b>" . $sFileName . "</b> já existe";

    }

    else{

      //Pega a extensão do arquivo

      $TipoExtensao = pathinfo($sFileName, PATHINFO_EXTENSION);

      // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta

      // Primeiro verifica se deve trocar o nome do arquivo  

      $unixTime = time();

      $timeZone = new \DateTimeZone('America/Sao_Paulo');

      $time = new \DateTime();

      $time->setTimestamp($unixTime)->setTimezone($timeZone);

      $formattedTime = $time->format('d-m-Y_l_h-i-s-a');

         

      $aleatorio = rand();

      if($TipoExtensao == 'pdf'){

        $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.pdf';

      }else{  

        $nome_final = $id_url .'_'. $formattedTime .'_'. $aleatorio .'.jpg';

      }

      // Depois verifica se é possível mover o arquivo para a pasta escolhida

      if (move_uploaded_file($nomeTemporario, $_UP['pasta'] . $nome_final)) {

        // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo

        echo "Upload do arquivo ".$sFileName." foi efetuado com sucesso!";

      } else {

        // Não foi possível fazer o upload, provavelmente a pasta está incorreta

        echo "Não foi possível enviar o arquivo, tente novamente";

      }  

    }

    echo <<<EOF

<p></p>

<p>Nome: {$sFileName} Tamanho: {$sFileSize}</p>

<p>{$erro}</p>

<p></br></p>

<p>Posição: {$i}</p>

<p>Algum erro?: {$erro}</p>

<p>Nome Inicial: {$sFileName}</p>

<p>Nome Temporário: {$nomeTemporario}</p>

<p>Nome Final: {$nome_final}</p>

<p>Tamanho: {$sFileSize}</p>

<p></br></p>

EOF;

  }else{

    echo "Selecione algum arquivo de imagem ou PDF para fazero upload.";

  }

}

echo <<<EOF

<p></p>

<p>Número de arquivos adicionados no upload: {$numeroCampos}</p>

EOF;