Script php: Upload file con filtro estensione e dimensione massima

   difficoltà:  script script script script script

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">
<input type="file" name="file1">
<input type="submit" value="upload">
</form>
  File upload.php
<?
$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;
}
}
?>
  




Commenti


  Ermete Bottazzi

24/9/2007 14:31:32

Grazie per il lavoro eseguito

  Davide

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

  Fabio

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

  PeterPetrelli

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

  Fabio

19/11/2007 14:23:26

forse questo ti puo' essere utile:
Elencare file contenuti in cartella

  billi

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

  Fabio

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?

  billi

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>


  Fabio

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

  billi

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ì...

  Fabio

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

  billi

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

  billi

6/12/2007 14:29:08

upload_tmp_dir (no value) (no value)
cosa significa?

  Fabio

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..

  billi

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

  Fabio

6/12/2007 14:35:20

che non hanno settato la cartella dei file temporanei.. è per quello che non fa l'upload.

  billi

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

  Fabio

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

  billi

6/12/2007 15:52:51

subito dopo c'è:

chmod($cartella_upload.$_FILES['file1']['name'],0777)

lo lascio invariato?

  Fabio

6/12/2007 15:56:33

no, anche li $foto

  billi

6/12/2007 16:00:20

perfetto!
ora è tutto ok!

Sei stato davvero molto gentile.
Un saluto,
billi

  davide

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?

  Fabio

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.

  davide

4/3/2008 13:29:38

grazie!

  lorenzo

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

  Luca

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

  Maximum92

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.

  Ds

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 ^^

  Robyonweb

23/2/2009 21:49:22

Ma questo codice permette di visualizzare su una pagina tutti i file caricati? Risp pls

  Fabio

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

  Michele

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.

  Fabio

23/6/2009 16:28:38

setti la caertella di destinazione:

$cartella_upload="public/";

  Michele

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.

  Fabio

23/6/2009 17:13:52

c'è nello script.
$nome_file
è il nome del file

  christian

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. ??????????

  Marco

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!

  Samuele

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.


  Mad

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

  davide

8/12/2010 22:57:26

Ciao ho provato il tuo script ma non mi trova la cartella /CAIO io uso un server altervista uso filezilla per usarlo e voglio che il file si salvi nella cartella su remoto quindi /CAIO..MA MI DICE CARTELLA NON ESISTENTE..MI PUOI AIUTARE!!

  Claudio

28/2/2011 18:42:21

Ciao scusa ho letto tutti i commenti precedenti ma non ho trovato la soluzione al mio problema. Vorrei poter caricare il file con il suo nome originale e accanto accostarci dei nomi: esempio: nome_originale_file_$nome_$cognome.png

deduco sia da inserire nella stringa $nome_file=$_FILES['file1']['name']; ma non saprei bene come, grazie.

  Matteo

19/4/2011 18:33:42

Ciao,
Io invece al posto di immagini vorrei caricare i video. cambio le estensioni (nell'array) ma quando carico il video mi dice che "non ho selezionato alcun file". Andando a controllare gli errori su Apache mi dice che l'errore è nella pagina html e non php in quanto la dimensione del video che carico è troppo grande e non lo passa nel form. Come potrei fare?
Grazie,
Matteo.

  Davide Giacobino

10/7/2011 10:26:26

Lo script è molto vulnerabile ad attacchi di hacking in quando chiunque potrebbe caricare files di testo del tipo .php.gif... consiglio di fare questi controlli:

// Ottengo le informazioni sull'immagine
list($width, $height, $type, $attr) = getimagesize($_FILES['image']['tmp_name']);
// Controllo che il file sia in uno dei formati GIF, JPG o PNG
if (($type!=1) && ($type!=2) && ($type!=3)) {
$msg = "<p>Formato non corretto!!</p>";
break;
}

Così saranno accettate solo le immagini.

  gianni

11/8/2011 13:49:50

salve...ho provato a caricare i file ma dopo aver cliccato su upload mi viene scritto :"La cartella di destinazione non esiste"
dove devo creare la cartella?e come la devo chiamare?

  gianni

11/8/2011 15:06:14

salve...sono riuscito a risolvere x la cartella ora però ho un altro problema...dopo aver fatto l'upload dell'immagine l'immagine finisce nella cartella public, però non viene mostrata nel sito...come faccio a far sì che una volta uploadata l'immagine venga anche mostrata nella pagina?
mi scuso per l'ignoranza

  diti

31/8/2011 11:41:14

Ragazzi...nn riesco a farlo funzionare... mi da quest'errore... mi aiutate??

Warning: move_uploaded_file(public/particle2.png) [function.move-uploaded-file]: failed to open stream: Permission denied in /Applications/xampp/xamppfiles/htdocs/sito/upload.php on line 27

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/private/var/tmp/phpoAtZPi' to 'public/particle2.png' in /Applications/xampp/xamppfiles/htdocs/sito/upload.php on line 27
Impossibile effettuare l'upload del file

  simone

13/10/2011 19:02:17

salve sono nuovo in questo forum io sto cercando di fare un sito web dove tutti gli utenti si potranno costruire il proprio sito web gratis, e trovo molto utile questo script ma mi chiedevo se fosse possibile una modifica, se quando si fa un upload si potrebbe impostare in automatico che il file che viene carricato venga messo nella cartella dove si trova il form in automatico senza specificare la destinazione in modo che mettendo e configurando questo script su ogni cartella i file vengano importati in cartelle separate vi ringrazio anticipatamente a tutti



Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.