Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    255

    Problema assurdo con upload

    Ciao a tutti, ho un problema con un upload php che non riesco a spiegarmi.
    Ho un sito dove vengono caricate immagini da un pannello di controllo, dal mio pc riesco tranquillamente a caricarle, a prescindere dal browser che uso.
    Dal pc del cliente, con qualsiasi browser, dà problemi.
    In breve il codice che utilizzo è questo

    $foto = $_FILES['foto']['tmp_name'];
    $fotonome = $_FILES['foto']['name']; //lo metto ma poi non lo uso

    if($foto!=""){
    $url = time().".jpg";
    $upload_directory = $_SERVER["DOCUMENT_ROOT"].'/img/'.$url;
    move_uploaded_file($foto,$upload_directory);
    chmod($upload_directory,0644);
    }

    la cosa assurda che avviene è questa
    se io carico il file (ad esempio Inverno.jpg) con questo codice il nome del file caricato sarà ad esempio 1234264963.jpg, mentre il cliente quando carica, nonostante non estraggo il nome reale del file, me lo fa diventare 1234264963Inverno[].jpg, con le parentesi quadre, e questo crea problemi.

    Non ho alcuna idea del perche avviene. Non posso mettere mani ne sul server ne sul pc del cliente, i permessi di scrittura sono tutti messi e non dipende dal browser perche da lò stesso problema con qualsiasi uso. Vorrei solo impedirgli di mettere il nome del file con le parentesi quadre perche i problemi nascono da li, in quanto non carica l'immagine e i log apache dice "file does not exist"

    Spero qualcuno abbia affrontato un problema simile, ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    puoi mettere mano al pennello ( php ) visualizzato dall'utente?

    se fosse cosi, potresti inserire una verifica con file_exists e di conseguenza modificare il nome del file...

  3. #3
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    quello che mi meraviglia è che funziona anche sul tuo p.c. trasformato a web-server.
    $fotonome = $_FILES['foto']['name']; //lo metto ma poi non lo uso
    ma poi non lo usi ... probabilmente (e non so perchè) ti crea poi in automatico un array che prende il nome dal nome dell'immagine
    es. l'immagine inverno.jpg ... e php ti crea l'array inverno[]
    per me dovrebbe segnarti errore perchè non lo usi.
    $foto è l'elemento di un array e non una stringa .... quindi
    if(!empty($foto)) {
    e non
    if($foto!="") {

    rivedi questo,
    chiediti perchè inverno[] (con le parentesi quadre ... come dici tu) è un array che viene creato automaticamente
    e poi riprova.

    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    255
    si ma quello che io non capisco è questo
    com'è possibile che se io faccio

    move_uploaded_file($foto,$upload_directory);

    dove $foto sarebbe $_FILES['foto']['tmp_name'];

    e $upload_direct il percorso con un nome che creo io, perche lui ci mette quell'Inverno[]?
    cioe io $upload_direct lo genero soltanto cosi

    $_SERVER["DOCUMENT_ROOT"]."/img/".time().".jpg";

    la cosa bella è che tutto questo sul mio pc funziona ma non nel senso che sto facendo funzionare il sito in locale, ma nel senso che questo sito è online e se mi ci connetto dal mio pc e faccio l'upload funziona correttamente, dal pc del cliente, se va sul sito e fa l'upload mette questo Inverno[]!!!

    :master:

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    non ti so rispondere... però ripeto: se la lunghezza del nome è sempre la stessa nel pannello di controllo dell'utente, quando viene visualizzato l'output puoi utilizzare la funzione substr, così da mostrare solo la parte che ti interessa. oppure utilizzi le regex.

  6. #6
    prova cosi


    Codice PHP:
    $foto = @file_get_content($_FILES['foto']['tmp_name']); 
    $fotonome $_FILES['foto']['name']; 

    if(
    $fotonome!="") { 

          
    $url time().".jpg"
          
    $upload_directory $_SERVER["DOCUMENT_ROOT"].'/img/'.$url;

          
    $file fopen($upload_directory,'w+');
          
    fwrite($file,$immagine);
          
    fclose($foto);

     } 

  7. #7
    Perché non debuggi lo script prima di passare alla funzione successiva?
    Io farei così:
    Codice PHP:
    $foto $_FILES['foto']['tmp_name'];
    $upload_directory $_SERVER["DOCUMENT_ROOT"]."/img/".time().".jpg";

    echo 
    $foto."
    "
    .$upload_directory;
    exit; 
    Quantomeno in questo modo vedi da dove nasce l'inghippo.
    Commenta anche la stringa $fotonome = $_FILES['foto']['name']; in modo che lo script non la veda. Magari c'è un qualche errorino di sintassi che non vediamo e che genera il comportamento anomalo che descrivi.

    Ora ti volevo far notare un po' di cose.
    Il controllo sul mancato upload del file, si fa con $_FILES['foto']['error'].

    Se è uguale a 0 significa che il file è stato caricato nel server.
    Altrimenti, ci sono altri 4 parametri.
    Adesso non ricordo di preciso l'associazione "numero/significato", ma dovrebbe essere qualcosa tipo:
    • 1 - File di dimensioni superiori rispetto a quanto settato nel PHP.INI
    • 2 - File di dimensioni superiori rispetto a quanto settato come valore massimo nella form (MAX_FILE_SIZE)
    • 3 - non ricordo
    • 4 - file incompleto
    Trovi diverse informazioni in merito a queste enum in giro per il web e potresti anche utilizzare tali valori per completare il tuo script con un solido Report Degli Errori.
    Se fai il controllo, come suggerito da *pragma, con !empty() tornerà sempre qualcosa, proprio perché un valore (che sia 0, 1, 2, 3 o 4) è sempre contenuto in $_FILES['foto']['error'], per cui $_FILES non sarà mai vuoto!!!

    Altra considerazione sullo script.
    Se chi usa lo script, dovesse caricare una immagine diversa da un JPG?
    Ti consiglio di usare $_FILES['foto']['type'] e di fare un restringimento dei tipi di file possibili da caricare.

    Non capisco poi cosa ti abbia voluto suggerire Mr.Click che ti vorrebbe far leggere il file e trasformarlo in una stringa (file_get_content) per poi andarlo a scrivere nuovamente come fosse un file di testo ma con estensione JPG.
    Non ho mai visto uno script del genere, magari funziona pure, ma di sicuro è un lavoro inutile.... quantomeno perché non risolve il problema per cui hai aperto il thread.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Ho fatto una ricerchina veloce e vi passo le enum di $_FILES error.

    0: UPLOAD_ERR_OK: nessun errore, l'upload è stato eseguito con successo
    1: UPLOAD_ERR_INI_SIZE: il file caricato eccede la dimensione massima specificata in upload_max_filesize
    2: UPLOAD_ERR_FORM_SIZE: il file inviato eccede le dimensioni specificate nel parametro MAX_FILE_SIZE del form (se presente)
    3: UPLOAD_ERR_PARTIAL: upload eseguito solo parzialmente
    4: UPLOAD_ERR_NO_FILE: il file non è stato caricato
    5: UPLOAD_ERR_NO_TMP_DIR: la cartella temporanea non esiste (da PHP 4.3.10 e PHP 5.0.3)
    Spero vi possano tornare utili.

    Tra l'altro, nel sito di W3Schools c'è un buon gestore di upload, semplice ed efficace, potete anche darci un'occhiata:
    W3Schools.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    quello che ho scritto io funziona e come...anche io avevo lo stesso problema di Ufotizio....e ho trovato su un altro forum questa soluzione. con il codice che ho postato io non hai problemi inerenti alle caratteristiche dell'immagine xke viene trattata come un generico file..al fine della programmazione non è correttissimo ma all'atto pratico funziona e anche bene..

  10. #10
    Originariamente inviato da mr.click
    al fine della programmazione non è correttissimo ma all'atto pratico funziona e anche bene..
    Io sono dell'opinione che i problemi è sempre meglio risolverli, non arginarli.
    Con il tuo metodo, prendi dei dati binari (il file appunto) e li tratti come fossero una semplice stringa di testo.
    Il concetto, a mio modesto parere, è sbagliato di partenza.
    Meglio debuggare per piccoli gradi e trovare il motivo di un comportamento errato dello script.

    Ma poi alla fine, ognuno fa come meglio crede.
    Per portare un esempio: nessuno vieta che per andare a Milano da Roma, si possa passare per Napoli, Palermo o Bari.
    Ma conviene????

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.