Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di gabar-el
    Registrato dal
    Jun 2006
    Messaggi
    2,222

    mantere il nome del file caricato in un form per evitare sovrascritture

    ciao, ho un form che mi carica dei file pdf con questa parte di codice:
    Codice PHP:
    if (isset($_FILES['allegato']['tmp_name'])) {
                        
    $allegato="../circolari/allegato_prova.pdf";
                    
    copy($_FILES['allegato']['tmp_name'], $allegato);
                    } else {
                        
    $allegato="";
                    } 
    mi stavo chiedendo come fare per far si che il nome del file caricato non sia quello predefinito, ma mantere quello che appunto viene caricato (magari togliendo pure gli spazi di troppo nel nome del file) dal campo allegato. Come posso implementare una situazione del genere? non capisco molto di php, mi ci sono messo da poco.
    grazie
    Si fanno sempre nuove scoperte

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    innanzitutto togli questa funzione e usa quella corretta, poi come secondo parametro parti da $_FILES['allegato']['name'], sul quale puoi fare qualsiasi cosa, nell'esempio uso un semplice str_replace:
    codice:
    copy($_FILES['allegato']['tmp_name'], $allegato);
    codice:
    move_uploaded_file($_FILES['allegato']['tmp_name'], str_replace(' ', '_', $_FILES['allegato']['name']));

  3. #3
    Utente di HTML.it L'avatar di gabar-el
    Registrato dal
    Jun 2006
    Messaggi
    2,222
    grazie, ora provo, ma mi spiegheresti l'utilizzo di ciò che è all'interno del str_replace? non riesco a capire a cosa servono gli apici che hai messo?
    grazie
    Si fanno sempre nuove scoperte

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    sostituisce " " (che è uno spazio) con "_".

    ciao

  5. #5
    Utente di HTML.it L'avatar di gabar-el
    Registrato dal
    Jun 2006
    Messaggi
    2,222
    grazie, perchè la chiami funzione corretta? copy non lo è?

    non capisco alcune cose....
    se questa variabile mi da il percorso nel db come posso toglierla?
    Codice PHP:
    $allegato="../circolari/allegato_prova.pdf"
    e in generale come implemento $allegato?

    io ho questo script:
    Codice PHP:
    if (isset($_FILES['allegato']['tmp_name'])) { 
                        
    $allegato="../circolari/allegato_prova.pdf"
                    
    copy($_FILES['allegato']['tmp_name'], $allegato); 
                    } else { 
                        
    $allegato=""
                    } 
    tu mi dici di usare move_uploaded_file e fin qui ci sono, ma mi perdo con il contenuto di str_replace, tant'è che il mio script non funziona più poiche mi dice che non è in grado di muovere il file
    codice:
    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php9EC.tmp' to '' in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\elabora_gestione_inserisci.php on line 100
    e il percorso in cui cerca di spostarlo non è quello che vorrei, da dove lo setto che non riesco a capire?
    grazie
    Si fanno sempre nuove scoperte

  6. #6
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    ..mmh si sono anche iuo perplesso sull'uso di move_uploaded_file invece che del copy, a me ha dato un sacco di problemi, risolti poi appunto col copy()..

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  7. #7
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da thitan
    ..mmh si sono anche iuo perplesso sull'uso di move_uploaded_file invece che del copy, a me ha dato un sacco di problemi, risolti poi appunto col copy()..
    Il move_uploaded_file è il metodo corretto, che poi funzioni anche con copy è un altro paio di maniche.

    Se non usi move_uploaded_file il file che hai caricato sul web server rimane nella directory temporanea, proprio perchè lo copy e non lo sposti.
    Potresti anche fregartene di quello che avviene sul server, anche perchè la cartella temporanea viene periodicamente svuotata, è solo una questione di forma.

    Per quanto riguarda la prima domanda,

    codice:
     
    $allegato="../circolari/allegato_prova.pdf";
    lo puoi togliere, oppure modificare con il giusto percorso prima del move_uploaded_file (io nn avevo pensato al percorso)

    codice:
    $allegato = '../circolari/'.str_replace(' ', '_', $_FILES['allegato']['name']);
    Ti consiglio inoltre di cambiare questo controllo
    codice:
    if(isset($_FILES['allegato']['tmp_name']) {
    
    }
    che testa solo se la variabile è settata, con quello successivo, che verifica che il file abbia un peso:
    codice:
    if(isset($_FILES['allegato']) && $_FILES['allegato']['size'] ) {
    Per quanto riguarda l'errore vero e proprio, sembra che il filename sia vuoto... forse basta il cambio di controllo che ti ho dato, per sicurezza fai un upload di prova e nella tua pagina metti (solo per debug)

    print_r($_FILES)

    e vedi se le informazioni sono corrette.

    ciao

  8. #8
    Utente di HTML.it L'avatar di gabar-el
    Registrato dal
    Jun 2006
    Messaggi
    2,222
    grazie, il codice mi funziona bene, ti chiedo 2 cose se non ti dispiace: in primis se è corretto semanticamente:
    Codice PHP:
    if (isset($_FILES['allegato']) && $_FILES['allegato']['size']) {
                        
    $allegato="../circolari/".str_replace(' ''_'$_FILES['allegato']['name']);
                    
    move_uploaded_file($_FILES['allegato']['tmp_name'], $allegato);
                    } else {
                        
    $allegato="";
                    } 
    poi....
    che testa solo se la variabile è settata, con quello successivo, che verifica che il file abbia un peso:

    if(isset($_FILES['allegato']) && $_FILES['allegato']['size'] ) {
    cosa intendi per abbia un peso? e a proposito di peso, quanto può essere grande al max un file caricato?
    circa poi [tmp_name], a cosa serve di preciso?

    utlima cosa: non ho problemi circa il tipo di file caricato vero? saranno sicuramente o .doc o .odt o pdf, non cambia nulla o meglio che metta una funzione che dica di accettare solo questi 3 tipi di file?
    grazie
    Si fanno sempre nuove scoperte

  9. #9
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da gabar-el
    cosa intendi per abbia un peso? e a proposito di peso, quanto può essere grande al max un file caricato?
    circa poi [tmp_name], a cosa serve di preciso?

    utlima cosa: non ho problemi circa il tipo di file caricato vero? saranno sicuramente o .doc o .odt o pdf, non cambia nulla o meglio che metta una funzione che dica di accettare solo questi 3 tipi di file?
    grazie
    Il codice in se può andare, come dici tu potresti controllare l'estensione per essere sicuro (ma solo fino a un certo punto) che i file siano quelli che ti aspetti (in realtà se voglio caricare un exe basta che cambio l'estensione, ma poi non dovrei essere in grado di lanciarlo).

    Per quanto riguarda il tmp_name, in pratica quando tu fai un upload il file viene caricato in una directory temporanea, e quello è il punto in cui si trova il file quando devi andare a prendertelo.

    (in teoria se tu facessi un form che permette l'upload e poi non fai nulla di quel file rimane in quella posizione finchè il sistema non decide di svuotare la directory temporanea).

    Per il peso intendo che qualcuno potrebbe caricare un file di 0 byte, in $_FILES['allegato']['size'] troverai le dimensioni in byte del file.

    Circa invece le dimensioni massime di upload dipendono da diversi valori:

    Uno si può specificare nel tag html (non ne ricordo il nome perchè non lo uso mai, tanto puoi sempre gestire la cosa lato php).

    Gli altri 2 sono impostazioni del server che trovi nel file php.ini e sono

    post_max_size // indica il massimo valore in mega che può essere inviato via post sommando i diversi campi upload che hai nel form
    upload_max_filesize // indica le dimensioni per singolo file

    Inoltre se devi caricare file molto pesanti devi tenere conto anche del tempo di esecuzione dello script, che potrebbe andare in timeout.

    ciao

  10. #10
    Utente di HTML.it L'avatar di gabar-el
    Registrato dal
    Jun 2006
    Messaggi
    2,222
    grazie della spiegazione....
    Si fanno sempre nuove scoperte

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.