Salve,
sto cercando di scrivere uno script per l'upload multiplo di immagini da un form che mi aiuti anche a ridimensionare i file qualora ce ne sia bisogno.
Ho testato lo script con file singoli, quindi prima di inserire il codice per il caricamento multiplo e tutto funziona alla perfezione.
Il problema è sorto appunto quando ho integrato il codice per il caricamento multiplo, non mi sembrava nienete di complicato, un semplice ciclo foreach eppure non mi carica più alcun file..
Potreste controllare se ho sbagliato o dimenticato qualcosa? Grazie in anticipo.
Il form, semplicissimo per il momento, giusto per testarlo
Codice HTML:
<form method="post" enctype="multipart/form-data" action="galleria.php" id="form">
<h1>Upload immagini PHP</h1>
<hr>
<label for="file">Seleziona l'immagine da caricare: </label>
<input type="file" name="file[]" multiple/>
<input type="submit" name="carica" value="Carica" />
</form>
E qui il codice php che dovrebbe effettuare l'upload
Codice PHP:
<?php
// Caricamento foto…
$nomePostFoto = "file"; // Nome del campo presente nel form di caricamento
$pathImg = "../eventi/"; // Path cartella imamgini
$id = $_FILES[$nomePostFoto]["name"]; // Nome immagine (eventualmente da generare in maniera pseudocasuale)
$wi = 250; // Max larghezza possibile
$he = 150; // Max altezza immagine
$allowedExtensions = array("jpg","jpeg","gif","png"); // Estensioni ammesse
if(!empty($_FILES[$nomePostFoto])) {
foreach ($_FILES[$nomePostFoto]["name"] as $indice => $id) {
if (strlen($nomeFoto)>0)
{
// Caricamento permesso ?
$caricaFoto = "NO";
$nomeFotoUno = basename($_FILES[$nomePostFoto]["name"][$indice]);
if (strlen($nomeFotoUno) > 0)
{
$parts = explode(".",$_FILES[$nomePostFoto]["name"][$indice]);
$ext = strtolower(end($parts));
if (!in_array($ext,$allowedExtensions))
echo "<br><br><br><div align=’center’>".$_FILES[$nomePostFoto]["name"][$indice]." ha una estensione non consentita (PNG, JPG, JPEG, GIF) e non e’ stato caricato!</div><br><br/>";
else
$caricaFoto = "SI";
if ($caricaFoto = "SI")
{
// Elimino il file precedente prima di caricare il nuovo onde evitare doppioni (Es. caricata precedentemente .jpg e carico .png)…
foreach($allowedExtensions as $extTmp)
{
$nomeJPGTmp = $pathImg.$id.".".$extTmp;
if (file_exists($nomeJPGTmp))
unlink($nomeJPGTmp);
}
$nomeFile = $id.".".$ext;
$uploadfile = $pathImg.$nomeFile;
if (move_uploaded_file($_FILES[$nomePostFoto]["tmp_name"][$indice],$uploadfile))
{
$size = getimagesize($uploadfile);
if ($size[0]>$wi)
{
// codice per il ridimensionamento
if ( ($size[0] > $wi) OR ($size[1] > $he) )
{
$rapporto = $wi / $he;
$proporzione = $size[0] / $size[1];
if ($rapporto > $proporzione)
{
// Fisso la larghezza e ricalcolo l’altezza…
$he=$size[1]*($wi/$size[0]);
}
else
{
// Fisso l’altezza e ricalcolo la larghezza…
$wi=$size[0]*($he/$size[1]);
}
$image = imagecreatefromjpeg($uploadfile);
$thumb = imagecreatetruecolor($wi,$he);
imagecopyresampled($thumb,$image,0,0,0,0,$wi,$he,$size[0],$size[1]);
// fisso una proporzione della qualità dell'immagine da caricare (valore predefinito e reale 100)
imagejpeg($thumb,$uploadfile, 80);
}
// distruggiamo il file originale che non ci serve più una volta caricato il file col resize
imagedestroy($image);
imagedestroy($thumb);
}
}
}
}
}
}
}
?>