Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19

    Rename file in caso di stesso file già presente in una sottocartella

    Ciao a tutti
    Mi sono appena iscritta. Sto studiando php da un po' e vorrei realizzare un sito per cambi turno e gestione del personale.

    Fatta questa premessa, vi espongo il mio problema: ho un form html per caricare file, ma quando carico un file già esistente me lo sovrascrive. Quindi ho pensato di rinominare il file da caricare aggiungendo la data di caricamento.

    Per esempio il file malattia.doc se già presente (perché qualche altro utente ha già caricato un file con lo stesso nome) deve essere rinominato come 29_9_2016_malattia.doc!

    Uso la funzione rename e ho provato ad aggiungere la funzione time(), ma il file non viene rinominato e si sovrascrive a quello esistente.

    Mi potete aiutare? Ciao a tutti e grazie a chi mi risponderà.

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Dovresti postare il codice.

    Ma vorresti che sia rinominato il file caricato o quello già presente?
    Ultima modifica di boots; 29-09-2016 a 09:00

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19
    Quote Originariamente inviata da boots Visualizza il messaggio
    Dovresti postare il codice.

    Ma vorresti che sia rinominato il file caricato o quello già presente?

    ciao boots,
    vorrei rinominare il file che sto caricando.

    posto una parte di codice, quella che mi interessa:


    codice:
    
            $directory=$_SERVER["DOCUMENT_ROOT"] . "/dipendenti/certificati/";
    	
            if(empty($errors)==true){
    			
                if(is_dir($directory)==false){
                    mkdir("$directory", 0700);		
                }
                if(is_dir("$directory/".$fileName)==false){
                    move_uploaded_file($tmpName,"$directory/".$fileName);
                }								
    
    
       	if(file_exists("$directory/".$fileName)== true){
       $new_directory="$directory/".$fileName.time();
    				rename($tmpName,$new_directory) ;
    			}
    		....
              }

    tra l'altro ho notato che quando viene caricato un file, viene sempre rinominato anteponendogli il numero 0. Può essere la funzione time()?

    grazie mille e buona serata!

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Prima di tutto alcune annotazioni:
    da
    if(empty($errors)==true){
    if(file_exists("$directory/".$fileName)== true){

    puoi rimuovere ==true è sottointeso.

    mentre
    if(is_dir($directory)==false){
    if(is_dir("$directory/".$fileName)==false){

    puoi scriverli
    if( ! is_dir($directory) ){
    if( ! is_dir("$directory/".$fileName) ){

    Non che come fai tu sia sbagliato, ma così il codice diventa un po' più pulito.

    Veniamo al tuo problema:
    tu prima fai l'upload e sposti il file nella cartella con move_uploaded_file() e solo dopo controlli se c'è (con file_exists() ), ovvio che c'è, ce l'hai appena messo, infine lo rinomini.
    Il risulato è che prima sovrascrivi il vecchio file e poi cambi il nome, ti ritrovi solo col nuovo file col nome cambiato.

    Devi fare il contrario, prima controllare se nella cartella c'è un file con quel nome, e poi copiarci quello che stai caricando modificandone il nome se necessario.

    Altra cosa:
    con
    $fileName.time()

    quello che fai è appendere un timestamp dopo l'estensione del file!
    dovresti fare
    time().$filename;
    Ultima modifica di Alhazred; 30-09-2016 a 10:35

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    19
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Prima di tutto alcune annotazioni:
    da
    if(empty($errors)==true){
    if(file_exists("$directory/".$fileName)== true){

    puoi rimuovere ==true � sottointeso.

    mentre
    if(is_dir($directory)==false){
    if(is_dir("$directory/".$fileName)==false){

    puoi scriverli
    if( ! is_dir($directory) ){
    if( ! is_dir("$directory/".$fileName) ){

    Non che come fai tu sia sbagliato, ma cos� il codice diventa un po' pi� pulito.

    Veniamo al tuo problema:
    tu prima fai l'upload e sposti il file nella cartella con move_uploaded_file() e solo dopo controlli se c'� (con file_exists() ), ovvio che c'�, ce l'hai appena messo, infine lo rinomini.
    Il risulato � che prima sovrascrivi il vecchio file e poi cambi il nome, ti ritrovi solo col nuovo file col nome cambiato.

    Devi fare il contrario, prima controllare se nella cartella c'� un file con quel nome, e poi copiarci quello che stai caricando modificandone il nome se necessario.

    Altra cosa:
    con
    $fileName.time()

    quello che fai � appendere un timestamp dopo l'estensione del file!
    dovresti fare
    time().$filename;
    Ciao Alhazred grazie mille per la risposta, funziona tutto alla grande! Sei un grande!

    Alcune considerazioni: impostando il rename con time() il file da caricare, se gi� di suo � nominato con una stringa di molti caratteri, verrebbe abbastanza lungo. Cio� carico il file malattia_dipendente_cheneso_blablabla.pdf, questo file � gi� presente, quindi il codice gli aggiunge il timestamp.

    Domanda: per accorciare il nome del file come posso fare?

    Altra considerazione: ho impostato nel file php.ini il numero massimo di upload in 5 file da poter caricare simultaneamente e funziona. quindi se io seleziono 7 file dal form, in cartella ne vengono caricati solo 5. Quindi penso all'utente sbadato che che ne seleziona piu di 5 e preme invio. Se non controlla nella sua pagina personale, penser� di averli caricati tutti. Domanda: c'� modo di bloccare l'invio se l'utente seleziona piu di 5 file e di avvisarlo ?

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.