Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    Problemi upload con i vari browser

    Buon giorno, avrei risolto in parte,ma ho una curiosità.
    Praticamente, testando con Firefox, fino a qualche minuto fà credevo che l'upload, una volta individuati i formati consentiti, potesse andare bene per tutti i browser.
    Lo script che gestisce l'upload è questo:
    Codice PHP:
    //da form
    <input type="file" name="txtAllegato"/>

    //da UploadAllegati.php
    <?php
    $txtAllegato     
    = @$_FILES['txtAllegato']['tmp_name'];
    if(
    $txtAllegato=="" || $txtAllegato=="NULL"){
        
    $txtAllegato "Nessun Allegato";
    }
    else{

    var_dump($_FILES['txtAllegato']['type']);
    $allowed_types = array('application/txt','application/pdf','application/msword','text/plain','text/html','application/rtf','text/richtext','application/zip','application/x-rar-compressed');
    if(!
    in_array($_FILES['txtAllegato']['type'],$allowed_types)) {
    echo 
    "il File non è di tipo consentito";
    }
    else{
    echo 
    "il file è stato caricato";
    }
    }
    ?>
    Facendo in questo modo mi sono accorto che eseguendo un var_dump sul tipo di allegato mi risultava che con:
    - FireFox ed Opera lo interpretava cosi (string(28) "application/x-rar-compressed")
    - Chrome cosi (string(0) "")
    - IE, Safari ancora diverso (string(24) "application/octet-stream")

    Quindi avendo visto che IE e Safari mi restituivano "application/octet-stream", questo tipo l'ho aggiunto al resto risultando quindi:
    Codice PHP:
    $allowed_types = array('application/txt','application/pdf','application/msword','text/plain','text/html','application/rtf','text/richtext','application/zip','application/x-rar-compressed','application/octet-stream'); 
    Ora però, resta il problema di Chrome, e sorge un dubbio.
    Vedendo cosa mi restituisce il var_dump, ne deduco che Chrome non interpreti l'invio "$_FILES['txtAllegato']['tmp_name']" perchè mi restituisce string(0) "".

    Quindi la mia domanda è:
    c'è uno script per il controllo del tipo del file che vada bene per tutti i browser?
    Grazie mille..

  2. #2
    Secondo me faresti prima a controllare l'estensione del file...
    Potresti usare uno script come questo
    Codice PHP:
    <?php
        $allowedExtensions 
    = array('pdf','txt');
        foreach (
    $_FILES as $file){
            if (
    $file['tmp_name'] > ''){
                if (!
    in_array(end(explode(".",strtolower($file['name']))),$allowedExtensions)){
                    die(
    'Tipo di file non valido');
                }
            }
        }
    ?>
    controlla le estensioni di tutti i file presenti in $_FILES e blocca l'applicazione se una di queste non è presente nell'array $allowedExtensions, in cui inserirai quelle che desideri.

    Ciao
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  3. #3
    ti ringrazio e fin qui ok...ma se Chrome mi restituisce stringa vuota, come se per lui non fosse stato inviato nulla, come mi comporto?
    grazie ancora

  4. #4
    Ho provato con chrome la soluzione che ho proposto e funziona senza problemi, non restituisce nessuna stringa vuota e lo script fa correttamente il suo lavoro.
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  5. #5
    il problema non è il controllo, il problema è che:
    1) nella pagina.htm ho il form con l'input file, scelgo il file ed invio
    2) nella pagina uploadAllegati.php devo ricevere attraverso $_FILES['txtAllegato']['tmp_name'] il file che ho scelto.Giusto?

    praticamente, chrome mi restituisce stringa vuota, e quindi a conti fatti, è come se non ho inviato nulla...

    cioè, incredibile ma vero...

  6. #6
    La stranezza sta nel fatto che io stesso ho provato una cosa simile con chrome e tutto funziona a meraviglia, forse si tratta di un bug o di un difetto di configurazione di chrome nel tuo pc, che versione hai?
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  7. #7
    buon giorno...
    la versione di Chrome è la 7.0.517.41.
    Ho notato un'altra cosa stranissima.

    Codice PHP:
    //nella pagina uploadAllegati.php
    //inizializzo la variabile
    $txtAllegato     $_FILES['txtAllegato']['tmp_name'];

    //eseguo il var_dump
    var_dump($_FILES['txtAllegato']['type']);
    // e mi restituisce con Chrome
    string(0""

    //se visualizzo con un echo la variabile relativa
    echo "nome allegato: " $txtAllegato;
    //mi restituisce incredibilmente il nome del file caricato "nome_file.rar" 
    Incredibile...
    Ti viene in mente qualcosa?
    Ti ringrazio per la pazienza e ti auguro una buona giornata :|

  8. #8
    Originariamente inviato da ANTAGONIA
    buon giorno...
    la versione di Chrome è la 7.0.517.41.
    Ho notato un'altra cosa stranissima.

    Codice PHP:
    //nella pagina uploadAllegati.php
    //inizializzo la variabile
    $txtAllegato     $_FILES['txtAllegato']['tmp_name'];

    //eseguo il var_dump
    var_dump($_FILES['txtAllegato']['type']);
    // e mi restituisce con Chrome
    string(0""

    //se visualizzo con un echo la variabile relativa
    echo "nome allegato: " $txtAllegato;
    //mi restituisce incredibilmente il nome del file caricato "nome_file.rar" 
    Incredibile...
    Ti viene in mente qualcosa?
    Ti ringrazio per la pazienza e ti auguro una buona giornata :|
    Questo per la verità non è molto strano: dovrebbe verificarsi con tutti i browser e succede perchè la direttiva register_globals del php.ini è impostato su on, quindi php accetta il richiamo diretto alle variabili degli array superglobali: ad esempio $_POST['nome'] potrai chiamarla anche come $nome, stessa cosa per $_GET, $_FILES, $_SERVER e così via.
    Comunque ti consiglio di disattivarla, per motivi di sicurezza illustrati in questa pagina.

    La versione di chrome è identica alla mia. Hai provato a verificare il contenuto di $_FILE['tmp_name']?
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  9. #9
    buon giorno.
    allora le register_globals erano già su "off" e gli error_reporting sono stati disabilitati.

    - facendo il var_dump($_FILES['tmp_name']); ottengo string(0) "";
    - facendo invece il var_dump($_FILES['txtAllegato']['tmp_name']);
    ottengo string(14) "/tmp/phpY3wJq0"


    non so più a che santo votarmi...

  10. #10
    Forse ci siamo: guarda cosa contiene $_FILES['txtAllegato']['name']
    Se contiene il nome del file uploadato ti basta usare su quella variabile il controllo che ti ho suggerito io, rimuovere il tuo e il gioco è fatto.
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.