Home PHP Upload file in PHP
Upload file in PHP
Programmazione & Co.
Lunedì 18 Luglio 2011 09:30

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!

Ultimo aggiornamento Domenica 23 Ottobre 2011 10:39