upload di determinati tipi di file - come procedere?

ciao, ho questo codice per l'upload di un file

if (isset($_FILES['allegato3']['tmp_name'])) 
                { 
                    $allegato3 = "../circolari/".str_replace(' ', '_', $_FILES['allegato3']['name']); 
                    if(!move_uploaded_file($_FILES['allegato3']['tmp_name'], $allegato3)) 
                    { 
                        $allegato3 = ""; 
                    } 
                } 
                else 
                { 
                    $allegato3 = ""; 
                }

volessi specificare che devono essere solo file .pdf cosa dovrei fare?

grazie per qualsiasi info....

inviato 8 anni fa
gabar-el
X 0 X

 $_FILES['allegato3']['type']

dovrebbe restituirti la tipologia di file, fai qlc stampa e vedi cosa ti restituisce poi effettui un controllo...

ciao

risposto 8 anni fa
neryo
X 0 X

grazie, più o meno ho capito, ma sei un pò criptico e io sono un pò troppo inesperto...

quindi type mi riconosce il tipo di file, e io posso richiamarlo per es. appunto per fare un controllo, tipo if?

ovvero controllo se type (cioè il file caricato) corrisponde a .pdf che è l'unica estensione che vorrei consentire, giusto?

grazie

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

grazie, più o meno ho capito, ma sei un pò criptico e io sono un pò troppo inesperto...

quindi type mi riconosce il tipo di file, e io posso richiamarlo per es. appunto per fare un controllo, tipo if?

ovvero controllo se type (cioè il file caricato) corrisponde a .pdf che è l'unica estensione che vorrei consentire, giusto?

grazie

 :bye:

certo devi controllare se $_FILES['allegato3']['type'] == "pdf"

pero' fai un echo di $_FILES['allegato3']['type'] per controllare cosa ti restituisce cosi sai poi cosa mettere nella stringa del controllo... ok?

risposto 8 anni fa
neryo
X 0 X

ok, ci sono impazzito parecchio ma non ci sono saltato fuori....

io ho implementato così:

if (isset($_FILES['allegato']['tmp_name']) && $_FILES['allegato']['size'] && $_FILES['allegato']['type'])
            {
               if ($_FILES['allegato']['type'] !== "application/pdf")
               {
                  $allegato = "";
                  echo "Puoi caricare solamente documenti pdf!";
               }
               else
               {
                  $allegato = "../circolari/".str_replace(' ', '_', $_FILES['allegato']['name']);
                  if(!move_uploaded_file($_FILES['allegato']['tmp_name'], $allegato))
                     {
                        $allegato = "";
                     }
               }
            
            }
            else
            {
               $allegato = "";
            }

ma non riesco a capire come fare per non permettere la scrittura dei dati, vorrei che se un file non è pdf venisse impedito di scrivere i rimanenti dati che vanno bene.

ho ottenuto lo stesso risultato sopra in altri modi, ma il problema è sempre quello....

grazie

risposto 8 anni fa
gabar-el
X 0 X

non posso far si che venga riconosciuto subito il documento e che mi venga scritto sotto il campo del form in questione un messaggio di errore a riguardo? altrimenti se mi carica cmq i rimanenti dati del form, gli utenti saranno costretti ad andare a modificare il campo, non mi sembra il massimo....

grazie

risposto 8 anni fa
gabar-el
X 0 X

Il fatto è che non è detto che il browser fornisca al server il mimetype, quindi controllare così non è detto che funzioni : if ($_FILES['allegato']['type'] !== "application/pdf").

Prova a dare un'occhiata al manuale, specialmente ai commenti http://it.php.net/manual/it/features.file-upload.php spesso sono fonte di enormi suggerimenti.

risposto 8 anni fa
Marco Grazia
X 0 X

grazie delle info marcolino!

ma quindi l'unica cosa che posso ottenere è che gli utenti vengano avvisati quando ormai hanno caricato il resto del form? Non posso far si che i dati del form non siano caricati se il file non è un pdf?

grazie

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

Ma assolutamente no, puoi fare in automatico che non vengano presi in esame file diversi dai pdf, ma non è quella la strada migliore.

Tieni presente che se ti fidi del mime rischi che un file di qualche tipo ma che porti l'estensione pdf passi il tuo blocco, d'altra parte leggere l'estenzione del file caricato pure non serve a molto dato che comunque si può modificare prima di caricarla.

La via migliore e più macchinosa per stare ragionevolmente tranquilli è quella di caricare il file in una cartella di comodo, aprirlo e leggere l'header del file. Ogni file particolare ha un header particolare: pdf, file di immagine, file eseguibili e così via, hanno tutti un header, conosciuta la dimensione dell'header (in byte) e la sua natura, si apre il file appena caricato in modalità binaria e si leggono i primi n byte, se questi ad un confronto tra stringhe corrispondono al giusto header li si sposta nella directory di destinazione, altrimenti li si cancella.

Macchinoso? Sì tanto.  :)

risposto 8 anni fa
Marco Grazia
X 0 X

al momento non necissito di controlli così macchinosi, si tratta solo di 2 o 3 utenti che caricheranno come gestori del sito vari documenti, quindi caricheranno solo pdf. Ciò che vorrei sarebbe appunto capire (non sono molto pratico) come non fare caricare i dati del form se il file non è un pdf....

grazie

risposto 8 anni fa
gabar-el
X 0 X

quindi vorresti che l'utente venga avvisato prima dell'invio del file? allora dovresti fare un controllo Javascript.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok, vedrà se implementarlo. grazie

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda