Risultati da 1 a 8 di 8

Discussione: php question - limitazione upload file

  1. #1

    php question - limitazione upload file

    //Creaiamo un array con i tipi di file che consentiamo di Hostare.
    $fileconsentiti = array(
    'image/pjpeg' => 'jpg',
    'image/jpeg' => 'jpg',
    'image/jpeg' => 'jpeg',
    'image/gif' => 'gif',
    'image/X-PNG' => 'png',
    'image/PNG' => 'png',
    'image/png' => 'png',
    'image/x-png' => 'png',
    'image/JPG' => 'jpg',
    'image/GIF' => 'gif',
    'image/bmp' => 'bmp',
    'image/bmp' => 'BMP',
    'application/pdf' => 'PDF',
    'text/plain' => 'TXT',
    'application/zip' => 'ZIP',
    'image/tiff' => 'TIFF',
    );

    //se il file non è del formato che vogliamo non eseguiamo il php!
    if(in_array($UploadedFile_type,$fileconsentiti) != 0)
    {
    print("Non è possibile postare una estensione di questo tipo!");
    exit;
    }



    Domanda, cosa sbaglio in questo codice?

  2. #2
    Borg L'avatar di y2ksw
    Data Registrazione
    Nov 2004
    Località
    Bologna, Italia
    Età
    64
    Messaggi
    9,035
    Un po' di tutto ...

    Prima, se non hai bisogno dei tipi mime, lasciali e crei un array senza chiavi.

    Poi, qui dici:

    if(in_array($UploadedFile_type,$fileconsentiti) != 0)

    Se $UploadedFile_type è in $fileconsentiti, allora mostra il messaggio ...


    Il ché non è vero. Vuoi far vedere il messaggio quando non è contenuto nell'array, oppure no?

    Qui sotto il codice aggiustato, ed ottimizzato a parte dell'array.

    Cerca di non fare troppi confronti e implementa solo quello che ti serve. in_array() restituisce un booleano, per cui è sufficiente fare if(in_array(...)) per le condizioni vere e if(!in_array(...)) per le condizioni false. Lo stesso vale quasi per tutte le variabili, stringhe incluse:

    if('') = FALSE
    if('abc') = TRUE
    if('0') = FALSE
    if('1') = TRUE

    Inoltre è buona pratica di non usare nomi di variabili con alti e bassi ($UploadedFile_type) ma tutto in minuscolo, e per costanti definiti tutto in maiuscolo (TIMENOW, TABLE_PREFIX, TRUE, FALSE). Rientrare il codice sempre con la massima cura, facilita la lettura. La tabulazione di 4 caratteri è ottima per tutte le situazioni.

    Questo per evitare problemi in un secondo momento.


    Codice PHP:
    $fileconsentiti  = array(  
        
    'image/pjpeg'     => 'jpg',
        
    'image/jpeg'     => 'jpg',
        
    'image/jpeg'     => 'jpeg',
        
    'image/gif'     => 'gif',
        
    'image/X-PNG'    => 'png',
        
    'image/PNG'         => 'png',
        
    'image/png'     => 'png',
        
    'image/x-png'     => 'png',
        
    'image/JPG'     => 'jpg',
        
    'image/GIF'     => 'gif',
        
    'image/bmp'     => 'bmp',
        
    'image/bmp'     => 'BMP',
        
    'application/pdf' => 'PDF',
        
    'text/plain' => 'TXT',
        
    'application/zip' => 'ZIP',
        
    'image/tiff' => 'TIFF',
        );
    //se il file non è del formato che vogliamo non eseguiamo il php!
    if(!in_array($uploadedfile_type$fileconsentiti))
    {
        echo 
    'Non è possibile postare un\'estensione di questo tipo!';
        die;

    Giovanni
    http://www.trimelli.com/

    Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.

  3. #3
    La differenza tra die ed exit?

    E tra echo e print?

  4. #4
    Borg L'avatar di y2ksw
    Data Registrazione
    Nov 2004
    Località
    Bologna, Italia
    Età
    64
    Messaggi
    9,035
    Con die esci da ogni genere di esecuzione, simile ad exit. E' più efficiente.

    echo è più efficiente di print, ma sono solo differenze di qualche frazione di millisecondo.
    Giovanni
    http://www.trimelli.com/

    Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.

  5. #5
    Borg L'avatar di y2ksw
    Data Registrazione
    Nov 2004
    Località
    Bologna, Italia
    Età
    64
    Messaggi
    9,035
    E l'utilizzo delle singole virgolette è molto più efficiente
    Giovanni
    http://www.trimelli.com/

    Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.

  6. #6
    Altra domanda, se io volessi confrontare il nome del file uplodato con tutti gli altri presenti nella cartella di destinazione. Come posso fare?

    Il codice comunque non funziona, te lo posto per intero:


    <HTML>
    <HEAD>
    <TITLE>Upload in php</TITLE>
    </HEAD>
    <BODY>
    <?
    $fileconsentiti = array(
    'image/pjpeg' => 'jpg',
    'image/jpeg' => 'jpg',
    'image/jpeg' => 'jpeg',
    'image/gif' => 'gif',
    'image/X-PNG' => 'png',
    'image/PNG' => 'png',
    'image/png' => 'png',
    'image/x-png' => 'png',
    'image/JPG' => 'jpg',
    'image/GIF' => 'gif',
    'image/bmp' => 'bmp',
    'image/bmp' => 'BMP',
    'application/pdf' => 'PDF',
    'text/plain' => 'TXT',
    'application/zip' => 'ZIP',
    'image/tiff' => 'TIFF',
    );
    //se il file non è del formato che vogliamo non eseguiamo il php!
    if(!in_array($uploadedfile_type, $fileconsentiti))
    {
    echo 'Non è possibile postare un\'estensione di questo tipo!';
    die;
    }

    $path="indirizzofornitodaaruba"; //indirizzo di dove vogliamo che il file vada nel server! Cartella uploadutenti in questo caso.

    if( $UploadedFile != none )
    {
    /*print("Percorso locale: $UploadedFile <BR>\n");
    print("Nome del file: $UploadedFile_name <BR>\n");
    print("Dimensione del file: $UploadedFile_size <BR>\n");
    print("Tipo di file: $UploadedFile_type <BR>\n");
    print("<HR>");*/

    //Fine del blocco
    if (copy( $UploadedFile , "$path/$UploadedFile_name" )){
    // print "$UploadedFile copiato con successo in $path/$UploadFile_name<br>";
    }else{
    print "Errore.. upload non riuscito<br>";
    }
    unlink($UploadedFile);
    }else{
    print "Errore.. nessun file.<br>";
    }

    print("<br/><br/>L'indirizzo del file da te hostato è: www.everythingworld.eu/uploadutenti/$UploadedFile_name");

    ?>

    <p><a href="http://www.everythingworld.eu/uploadutenti/<?php echo $UploadedFile_name ?>">LINK DEL
    FILE DA VOI HOSTATO</a></p>
    </BODY>
    </HTML>
    Ultima modifica di derfel; 03-12-2007 alle 23:13

  7. #7
    Borg L'avatar di y2ksw
    Data Registrazione
    Nov 2004
    Località
    Bologna, Italia
    Età
    64
    Messaggi
    9,035
    Credo con la funzione dir(). Oppure fai un tentativo di sola lettura di un file con lo stesso nome. Se fallisce, non c'è
    Giovanni
    http://www.trimelli.com/

    Per favore non mandatemi PM, ma scrivete sul forum. Vi sarà risposto prima.

  8. #8
    Citazione Originariamente Scritto da y2ksw Visualizza Messaggio
    Credo con la funzione dir(). Oppure fai un tentativo di sola lettura di un file con lo stesso nome. Se fallisce, non c'è
    Prima o poi ti faranno un monumento. Ora faccio le mie tremila prove come al solito poi ti faccio sapere.

    Intanto Grazie!

Discussioni Simili

  1. vBulletin 3.6.x Congfig file php
    Di Nero nel forum VBulletin 3
    Risposte: 5
    Ultimo Messaggio: 12-07-2007, 13:28
  2. vBulletin 3.5.x file php....
    Di super_mario_nos nel forum VBulletin 3
    Risposte: 18
    Ultimo Messaggio: 12-09-2006, 01:04

Tag per Questa Discussione

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •