Salve a tutti raga!..
Stò scrivendo questo post perchè girando e rigirando questo forum non ho mai trovato nulla che mi desse soddisfazione riguardo l'argomento che stò per trattare.
Questo mio script ha le seguenti funzioni:
- Upload di immagini con: Controllo peso (kb), Controllo dimensioni (pxl), Controllo file con stesso nome, Controllo del formato (gif, jpg, png);
- Ridimensionamento della foto;
- Creazione di un thumbnail (anteprima);
- Cancellazione del file originale in quanto è stato ridimensionato ed'è stato ridotto il peso.
Il file è testato e in uso da un sito, di seguito lo script e le varie spiegazioni.
PASSO 1:
Per prima cosa dobbiamo creare un form, che ci consenta di selezionare la foto dal hdd e successivamente di poterla caricare sul server del nostro sito;
ecco lo script della pagina: index.htm
PASSO 2:<center><form action="upload.php" method="post" enctype="multipart/form-data">
<h3>Selezione il file da caricare</h3>
<input name="image" type="file" size="40" />
<input name="upload" type="submit" value="Carica" />
<h4>Si prega di non cancellare la scritta sottostante, grazie!</h4>
<h6>Power by MDXstudios</h6>
</form>
Ora andiamo a creare la pagina che ci consentirà l'upload e tutte le varie funzioni allegate,
lo script verrà suddiviso il 4 step;
ecco il primo step della pagina: upload.php
step1 - Upload della foto con relativi controlli
Spiegazione dello step1 - Upload della foto con relativi controlli:<?php
do {
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
// Controllo del peso in kb
if ($_FILES['image']['size'] > 100000000) {
$msg = "
Il file non deve superare i tot KB!!</p>";
break;
}
// Ottengo le informazioni sull'immagine
list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);
// Controllo che le dimensioni (in pixel) non superino i 3000x3000
if (($width > 3000) || ($height > 3000)) {
$msg = "
Dimensioni non corrette!!</p>";
break;
}
// Controllo che il file sia in uno dei formati GIF, JPG o PNG
if (($type!=1) && ($type!=2) && ($type!=3)) {
$msg = "
Formato non corretto!!</p>";
break;
}
// Verifico che sul sul server non esista già un file con lo stesso nome
// In alternativa potrei dare io un nome che sia funzione della data e dell'ora
if (file_exists('up/temp/'.$_FILES['image']['name'])) {
$msg = "
File già esistente sul server. Rinominarlo e riprovare.</p>";
break;
}
// Sposto il file nella cartella da me desiderata "up/temp"
if (!move_uploaded_file($_FILES['image']['tmp_name'], 'up/temp/'.$_FILES['image']['name'])) {
$msg = "
Errore nel caricamento dell'immagine!!</p>";
break;
}
}
} while (false);
echo $msg = "Immagine caricata!.
Operazioni eseguite sull'immagine originale:
ridimensionata a 400 x 300
creato thumbnail 120 x 90
<h6>Power by MDXstudios</h6>";
?>
In questa prima parte è presente lo script che consente il vero e proprio upload,
- Lo script inizia con il controllo del peso dell'immagine, io ho impostato il valore 100000000 in quanto l'immagine viene uploadata e immediatamente dopo cancellata quindi non'è il peso a preucuparci,
- Il secondo passo dello script è il controllo delle dimensioni della foto in pixel anche quì ho abbondato inserendo: (($width > 3000) || ($height > 3000)) in quanto la foto verrà ridimensionata successivamente secondo le nostre direttive,
- Il terzo controllo è quello del formato, in questo caso sono ammessi solo i formati più comuni (gif, jpg, png),
- Il quarto ed ultimo controllo cerca nella cartella di destinazione un file (gif, jpg, png) con lo stesso nome di quello che stiamo uploadando,
- Infine copia l'immagine nella cartella da noi impostata in questo caso "up/temp/".
Step2 - Ridimensionamento della foto originale:
Spiegazione step2 - Ridimensionamento della foto originale:<?php
// Ottengo le informazioni sull'immagine originale
list($width, $height, $type, $attr) = getimagesize('up/temp/'.$_FILES['image']['name']);
// Creo la versione 400*300 dell'immagine
$small = imagecreatetruecolor(400, 300);
$cerca = imagecreatefromjpeg('up/temp/'.$_FILES['image']['name']);
imagecopyresized($small, $cerca, 0, 0, 0, 0, 400, 300, $width, $height);
// Salvo l'immagine ridimensionata nella cartella "up/small"
imagejpeg($small, 'up/small/'.$_FILES['image']['name'], 75);
?>
-Nel primo passo lo script prende tutte le informazioni necessarie per poter ridimensionare la foto originale
-Nel secondo invece si impostano i valori di larghezza (400) e di altezza (300) della foto
-Nell'ultimo passo lo script salva la foto ridimensionata nella cartella "up/small/"
Step3 - Creazione del thumbnail della foto originale:
Spiegazione step3 - Creazione del thumbnail della foto originale:<?php
// Ottengo le informazioni sull'immagine originale
list($width, $height, $type, $attr) = getimagesize('up/temp/'.$_FILES['image']['name']);
// Creazione del thumbnail
$thumb = imagecreatetruecolor(120, 90);
$source = imagecreatefromjpeg('up/temp/'.$_FILES['image']['name']);
imagecopyresized($thumb, $source, 0, 0, 0, 0, 120, 90, $width, $height);
// Salvo l'immagine ridimensionata
imagejpeg($thumb, 'up/tm/'.$_FILES['image']['name'], 75);
?>
Lo script è identico al precedente, si devono modificare solo i paramentri di larghezza e altezza del thumbnail (120 x 90) in questo caso, e la cartella di destinazione in questo caso "up/tm/".
step4 - Cancellazione della foto originale (in quanto sono state create due nuove immagini una da 400x300 pxl e il thumbnail da 120x90 pxl, questo passaggio lo ritengo indispensabile in qunto una foto scattata con una macchinetta in genere hanno dimensioni di 2000 e più pxl quindi ogni foto del genere peserebbe 3mb, quindi per me è da cancellare)
Spiegazione step4 - Cancellazione della foto originale:<?php
$xc = "up/temp/";
$filename = $_FILES['image']['name'];
$delet = "$xc$filename";
unlink($delet);
?>
-Nella prima variabile impostare il percorso della cartella dove è stata uploadata la foto originale,
-La seconda varibile non si deve cambiare, prende il nome della foto uploadata
-La terza variabile unisce le prime due
-Il quarto comando è quello che ci permette di cancellare la foto originale.
La pagina upload.php è terminata!!, ora avete il vostro upload completo e funzionante, il seguente script è stato testato sui server si Altervista e su Arruba, non hanno riscontrato nessun problema di funzionamento, basta solo un pò di pazienza nel cambiare le directori di salvataggio dei vari file, ma se non avete voglia basterà creare sul vostro ftp la seguente cartella con le relative sotto cartelle:
ATTENZIONE!!: RICORDATE DI IMPOSTARE I PERMESSI DI SCRITTURA IN TUTTE LE CARTELLE E SOTTO CARTELLE, IN CASO CONTRARIO LO SCRIPT NON FUNZIONERA' AL 100%, PER DOMANDE CHIEDETE PURE!mdx-upoad-->(dir principale contiene: "index.htm", "upload.php", "up(sotto dir)")
up-->(sotto dir di "mdx-upload" contente le cartelle con le foto: "tm(contiene: thumbnails)", small(contiene: foto ridimensionate)", "temp(contiene: foto originale che verrà cancellata)")
Un saluto MDXstudios