Script php: Upload file con filtro estensione e dimensione massima
difficoltà:

Script simili
5/10/2006
Con questo script php è possibile effettuare l'upload di un file sul server. E' possibile impostare una dimensione massima indicando il massimo peso che puo' avere il file in byte, Impostare la cartella di destinazione e decidere se filtrare o meno l'upload di file per estensione. Se la variabile $filtrare è uguale a 0 verà consentito l'upload di qualunque tipo di file, se invece $filtrare è uguale a 1 verrà filtrato l'upload consentendo il caricamento dei soli file le cui estensioni sono elencate nell'array $array_estensioni_ammesse.
<form ENCTYPE="multipart/form-data" action="upload.php" method="POST">File upload.php
<input type="file" name="file1">
<input type="submit" value="upload">
</form>
<?
$dimensione_massima=51200; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kb
$dimensione_massima_Kb=$dimensione_massima/1024;
$cartella_upload="public/"; //cartella in cui eseguire l'upload (controllare permessi scrittura)
// percorso cartella relativo $cartella_upload="../public/";
$filtrare=1; //filtrare x estensioni ammesse? 1=si 0=no
$array_estensioni_ammesse=array('.jpg','.jpeg','.gif','.png'); //estensioni ammesse
if(!isset($_FILES['file1']) || $_FILES['file1']['size']==0){
echo "Nessun file selezionato per l'upload";
}elseif($_FILES['file1']['size']>$dimensione_massima){
echo "Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb";
}else{
$nome_file=$_FILES['file1']['name'];
$errore="";
if($filtrare==1){
$estensione = strtolower(substr($nome_file, strrpos($nome_file, "."), strlen($nome_file)-strrpos($nome_file, ".")));
if(!in_array($estensione,$array_estensioni_ammesse)){
$errore.="Upload file non ammesso. Estensioni ammesse: ".implode(", ",$array_estensioni_ammesse)."<br/>";
}
}
if(!file_exists($cartella_upload)){
$errore.="La cartella di destinazione non esiste</br>";
}
if($errore==""){
if(move_uploaded_file($_FILES['file1']['tmp_name'], $cartella_upload.$_FILES['file1']['name'])){
chmod($cartella_upload.$_FILES['file1']['name'],0777); //permessi per poterci sovrascrivere/scaricare
echo "Operazione eseguita con successo. Upload riuscito.";
}else{
echo "Impossibile effettuare l'upload del file";
}
}else{
echo $errore;
}
}
?>
Permalink:
Tag:
Script Simili:
Script php: Resize immagini a dimensione fissa o proporzionale
Script asp: Leggere un file xml o un feed rss con asp
Script javascript: Anteprima immagine per upload
Script php: Caricare e Scaricare file via ftp con php
Link utili:
Vota:
Commenti
30/9/2007 22:36:20
Ciao,
questa è gia la seconda volta che vi scrivo :)
Questa volta volvevo chiedervi se era possibile fare la stessa cosa con ASP ..
Poi , a proposito di upload ... Ho visto in giro questo ajax, sono andato a cercare su internet cosa era .. ho visto che è possibile farlo con ajax senza asp o php .. è possibile ? Voi sapete come fare ?
Grazie come sempre! Ciao.
Davide
30/9/2007 23:46:50
E' possibile farlo anche con asp.. ma senza componenti dedicati è sicuramente molto più complicato. In giro una volta girava il famoso UPLOAD DI BAOL..ma il sito su cui era hostata non c'è più. E semplificava davvero la vita.
In ajax lo puoi fare..ma necessiti comunque di un linguaggio server, che faccia l'upload
19/11/2007 12:59:44
ciao, sono riuscito a farlo funzionare, adesso però
vorrei sapere se c'è il modo o uno script per stampare su una pagina web tutti i file uploadati nella cartella sotto forma di link.
mi spiego meglio:
con questo si salvano i file su server in una cartella
adesso vorrei che i file salvati su questa cartella potessero essere
visualizzati su una pagina web sotto forma di link
per scaricare i documenti.
grazie
19/11/2007 14:23:26
forse questo ti puo' essere utile:
Elencare file contenuti in cartella
6/12/2007 11:56:08
Buongiorno Fabio.
Innanzitutto grazie per il lavoro!
Ho inserito l'upload della foto in un form che avevo già preparato dove sono presenti altre richieste dati, quali nome, cognome, etc...
All'inizio aperto il form con:
<form method="post" action="salva.php" enctype="multipart/form-data">
e, alla fine, ho inserito solo il tuo:
<input type="file" name="file1">
tralasciando:
<form ENCTYPE="multipart/form-data" action="upload.php" method="POST">
<input type="submit" value="upload">
</form>
che erano già presenti nel mio form.
Poi, in "salva.php", ho copiato alla lettera il file "upload.php".
Risultato:
"nessun file selezionato per l'upload".
Dopo vari tentativi di capirne il motivo, mi sono arreso ed eccomi qui a chiederti aiuto.
Grazie mille,
billi
6/12/2007 12:13:45
@billi:
il tuo procedimento mi pare corretto... l'unico dubbio, forse una cavolata:
<input type="file" name="file1">
è all'interno del form?
6/12/2007 12:33:56
Grazie per la risposta.
Sì, eccolo qui:
<form method="post" action="salva.php" enctype="multipart/form-data">
Nome:<br />
<input type="text" size="45" name="nome" />
<br /><br />
Cognome:<br />
<input type="text" size="45" name="cognome" />
<br /><br />
<input type="file" name="file1">
<input type="submit" name="upload_form" value="Invia" />
</form>
6/12/2007 12:50:20
prova a mettere nella pagina salva.php all'inizio:
print_r($_POST);
print_r($_FILES);
in $_FILES dovrebbero venirti tutti i dati del file caricato.
A me passa i dati correttamente il tuo form. Al max prova a sostituire tutti i $_FILES con $HTTP_POST_FILES per le versioni precedenti a PHP 4.1.0
6/12/2007 12:58:29
uso PHP5
Array ( [nome] => giovanni [cognome] => verdi[upload_form] => Invia ) Array ( [file1] => Array ( [name] => 8.jpg [type] => [tmp_name] => [error] => 6 [size] => 0 ) )
Nessun file selezionato per l'upload
non capisco proprio perchè faccia così...
6/12/2007 14:20:14
Errore 6: Mancanza della cartella temporanea.
Sei in locale?
controlla sul file php.ini alla voce: upload_tmp_dir
6/12/2007 14:21:39
In locale funziona.
Array ( [file1] => Array ( [name] => lang.png [type] => image/x-png [tmp_name] => C:/Program Files/EasyPHP 2.0b1\tmp\php109.tmp [error] => 0 [size] => 5219 ) ) Operazione eseguita con successo. Upload riuscito.
E' possibile quindi che in rete qualcosa sia bloccato?
Come si può vedere?
Grazie per l'aiuto,
billi
6/12/2007 14:29:08
upload_tmp_dir (no value) (no value)
cosa significa?
6/12/2007 14:32:02
Prova a fare un file con solo
phpinfo();
e poi vedi cosa ti da alla voce
upload_tmp_dir
se è vuoto mi sa che ti conviene contattare il tuo hoster..
6/12/2007 14:35:15
upload_tmp_dir (no value) (no value)
Mi sa quindi che sia vuoto...
mmh...
Grazie per l'aiuto!!!
billi
6/12/2007 14:35:20
che non hanno settato la cartella dei file temporanei.. è per quello che non fa l'upload.
6/12/2007 15:38:41
APPLAUSI!!!
Funziona!
Sono riuscito a settare la TMP.
ora, se volessi rinominare le foto che mi mandano con:
$foto = "foto/" . $nome . "_" . $cognome . $estensione;
Dove infilo $foto nell'upload con il nuovo nome???
Grazie per tutto l'aiuto!
billi
6/12/2007 15:44:00
if(move_uploaded_file($_FILES['file1']['tmp_name'], $cartella_upload.$_FILES['file1']['name'])){
al posto di
$cartella_upload.$_FILES['file1']['name']
ci metti $foto
6/12/2007 15:52:51
subito dopo c'è:
chmod($cartella_upload.$_FILES['file1']['name'],0777)
lo lascio invariato?
6/12/2007 15:56:33
no, anche li $foto
6/12/2007 16:00:20
perfetto!
ora è tutto ok!
Sei stato davvero molto gentile.
Un saluto,
billi
3/3/2008 23:51:17
ciao, è favoloso il tuo script! vorrei chiederti una cosa...è possibile una volta che l'upload è terminato tornato alla pagina del form?
4/3/2008 9:08:03
Nel file upload.asp al posto di:
echo "Operazione eseguita con successo. Upload riuscito.";
metti:
header("location: paginaform.htm");
ps. attento che nella pagina upload.asp non venga scritto niente a video prima del comando header se no vien dato errore.
18/4/2008 16:04:42
salve a tutti, mi potreste aiutare? io ho provato a fare le 2 pagine x caricare file (ho aggiunto anche altre estensioni xche x lavoro mi servono anche video...). ma dopo aver selezionato il file e avviato l upload, dopo un po mi esce il messaggio:
La cartella di destinazione non esiste
vorrei che il materiale fosse caricato nella cartella www.seldaonline.com/video
3/6/2008 18:53:02
Ciao, complimenti per lo script!
Volevo sapere una cosa...
...eseguendo l'upload il nome del file rimane lo stesso con cui è stato uplodato, come poter cambiare il nome del file in upload con uno che si genera casualmente, non necessariamente con una sequanza ordinata?
Inoltre se qualcuno sa che codice implementare per poter ridimensionare le immagini e creare thumbs delle stesse credo che potrebbe essere utile.
Il risultato finale dovrebbe essere quello di mostrare a video (dopo l'upload corretto) l'immagine ridimensionata (thumb), poi cliccandoci sopra visualizzare l'originale rinominata.
;-)
Il nome dell'immagine grande sarà per esempio ASDEFRH.JPG, mentre la relativa thumb ASDEFRH_SMALL.JPG
Grazie mille in anticipo
12/6/2008 9:02:08
Salve e Grazie per questo fantastico script.
Volevo chiedervi una cosa: ho uploadato tutto nel mio server via FTP e funziona a meraviglia, però vorrei che dopo aver terminato l'upload del file venga mostrata una pagina con il link del file appena uploadato.
E' possibile?
Grazie in anticipo.
26/6/2008 12:28:35
Perchè per controllare l'estensione dei file non usi semplicemente la funzione pathinfo?
alla fine si potrebbe fare una cosa del genere:
$p = pathinfo($nomefile);
if(eregi("jpg|jpeg|gif|png",$p[extension])) {
// Istruzioni
}
va tutto e utilizzano 2 funzioni °_°
Saluti ^^
23/2/2009 21:49:22
Ma questo codice permette di visualizzare su una pagina tutti i file caricati? Risp pls
23/2/2009 23:36:49
Questo fa solo l'upload se vuoi vedere i file presenti in una cartella puoi vedere questo:
Elencare file in una cartella con php
23/6/2009 15:52:27
Ciao.
Quando effettuo l'upload, mi esce scritto: "La cartella di destinazione non esiste."
Non capisco proprio come devo chiamare la cartella di destinazione.
Aiuti?
M.
23/6/2009 16:28:38
setti la caertella di destinazione:
$cartella_upload="public/";
23/6/2009 17:09:02
Grazie ho risolto.
Vorrei fare una cosa.
Praticamente dopo che "uppo" un immagine, ad esempio: 2.png
Dopo che l'ho caricata voglio che esce la scritta: "Immagine caricata con successo: http://miosito.it/public/2.png"
Però io non conosco il nome del file caricato dall'utente.
Cosa dovrei fare?
M.
23/6/2009 17:13:52
c'è nello script.
$nome_file
è il nome del file
3/8/2009 20:37:58
Grazie mille!!
Fortunatamente mi funziona benissimo, ho un unico dubbio, forse è una stupidaggine: non capisco perchè i file caricati non si vedono via FTP (uso Filezilla, mi dice: "cartella vuota") mentre controllando direttamente nel file manager sul server i file sono (giustamente) nella cartella di destinazione a cui ho assegnato tutti i permessi. ??????????
8/3/2010 12:01:38
Ciao, grazie mille è uno script molto utile.
So che è un post vecchio, però vorrei fare lo stesso una domanda: se nella cartella di destinazione è presente un altro file con lo stesso nome e la stessa estensione, il file nuovo sovrascrive quello vecchio.
Come è possibile fare in modo che nel caso sia già presente un file con quel nome venga visualizzato un messaggio di errore chiedendo di rinominare il file?
Grazie!
31/3/2010 18:13:10
Ciao. Complimenti.
Non mi riesce una cosa. Lo script funziona perfetto non da nessun errore.
Solo che non carica il file. Possibile?
Tra l'altro all'apertura della pagina mi compare sempre la scritta "Nessun file selezionato per l'upload" però errori non li da. La cartella tmp è attiva /tmp/
Grazie.
20/7/2010 23:47:23
Grazie per lo script l'ho usato tanto nell'ultimo perioido.
Volevo chiederti, se era secondo te possibile tramite questo script aggiungere l'estensione flv e caricare video direttamente sul server.
Io c'ho provato ma nn so perchè mi esce "Nessun file selezionato per l'upload", in pratica come se nn avessi scelto nessun file.
Come potrei sistemare la cosa?
Grazie in anticipo

Feed Rss
24/9/2007 14:31:32
Grazie per il lavoro eseguito