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?