Home / Programmazione / PHP / Upload file in PHP
Mattepuffo

Upload file in PHP

Upload file in PHP

L'upload dei files è una cosa che prima o poi tutti i programmatori si trovano ad affronare.

Oggi vi posto e vi spiego come uplodare più immagini contemporaneamente in PHP.

Prima di tutto la parte HMTL; un form con 5 upload:

<form action="" method="post" enctype="multipart/form-data" name="form_upload">
<table>
<tr>
<td>
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
<input type="file" name="file[]" /> <br />
</td>
</tr>
<tr>
<td>
<input type="submit" value="Upload" name="upload_img" />
</td>
</tr>
</table>
</form>

 

E' un semplice form.

Come vedete il nome dei file è file[] con le parentesi quadre; questo è per fare in modo che PHP li tratti come array di dati.

A questo punto vediamo la parte di PHP:

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['upload_img'])) {
$maxSize = 512000; //byte => 550KB
$acceptType = array(
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'png' => 'image/png'
);
$cartella = "../gallery/";

for ($i = 0; $i < count($_FILES['file']['name']); $i++) {
if ($_FILES['file']['name'][$i] != "") {
$nome_upload = uniqid('gallery_') . strrchr($_FILES['file']['name'][$i], '.');
$destinazione = $cartella . $nome_upload;
if ($_FILES['file']['size'][$i] <= $maxSize) {
if (in_array($_FILES['file']['type'][$i], $acceptType)) {
if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $destinazione)) {
echo "File " . $i . " caricato<br/>";
} else {
echo "Errore nell'upload<br/>";
}
} else {
echo 'Tipo file non valido<br/>';
}
} else {
echo 'File troppo grande<br/>';
}
} elseif ($_POST['upload_img']) {
echo 'Non ci sono file da inserire<br/>';
}
}
}
?>

Nella prima parte dello script ho impostato alcuni dati:

  • la dimensione massima
  • le estensioni supportate
  • la cartella di destinazione

Dopo parte il tutto: il ciclo for prende tutti gli elementi passati e se non sono vuoti inizia una serie di operazioni.

Prima imposta il nome, che è dato dalla funzione uniqid() più l'estensione del file.

uniqid() resistuisce un codice univoco; io gli ho impostato anche un prefisso, ed in più gli si può passare un valore boolean per aumentare la causalità.

Poi imposta la destinazione, che è data dalla cartella più il nome del file.

Dopo di che viene prima controllata la misura e poi l'estensione fa parte di quelle impostate nell'array sopra.

Se i controlli vanno a buon fine si copiano i file nella directory scelta con il nome impostato come gli avevamo detto.

Altro controllo che si poteva fare era quello sulle dimensioni (larghezza e altezza); a me però per ora non serve e non ci sono messo.

In caso aggiornerò l'articolo!