Newsgroup: it.comp.www.php
Titolo: Non sovrascrivere file

Ciao a tutti e buona Pasqua.
Ho un problema e non so come risolverlo, spero che qualcuno mi possa
aiutare.
Quando effettuo l'upload di un file già esistente questi mi viene
sovrascritto nella directory di destinazione ma io vorrei far scegliere
all'utente se farlo sovrascrivere oppure no.
La mia idea è quella di far apparire una "finestrella" che dica
all'utente se continuare oppure no con l'upload del file. In caso che
l'utente scelga di continuare il file viene sovrascritto altrimenti
viene annullata l'operazione.
Come posso fare a gestire questa situazione?
Tenete presente che non sono molto brava a programmare quindi per
favore fatemi esempi precisi e non molto complicati perchè altrimenti
non ci capirei nulla.
Vi ringrazio per la disponibilità e la pazienza :)
Ancora auguri
Faby

 Come posso fare a gestire questa situazione?
Salva il file con un nome temporaneo nel tuo sito, salva tale nome in
sessione, chiedi all'utente che cosa fare, poi o elimini il file oppure
lo rinomini.
 
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

all'utente se farlo sovrascrivere oppure no.
controlla  con  file_exists  se esiste gia' nella tua directory il file del 
quale si e' fatto l'upload   usando $_FILES['userfile']['name'].  se e' gia' 
presente metti nella session (o nel form della richiesta) il nome del file 
temporaneo ($_FILES['userfile']['tmp_name']) e poi chiedi se vuoi 
sovrascrivere o no. per sicurezza, potresti salvare comunque questo file e 
spostarlo nel posto giusto o cancellarlo solo dopo la conferma.
se invece non e' presente lo sposti  , sempre con move_uploaded_file , senza 
nessuna richiesta. 

Grazie mille per le risposte ma non riesco neanche a controllare se il
file esiste oppure no. Cerco di spiegarmi meglio. Il codice per
l'upload del file è:
/*Upload del file*/
/********************* VARIABILI DA SETTARE ********************/
// Directory dove salvare i files Uploadati (percorso assoluto)
$upload_dir = $_SERVER["DOCUMENT_ROOT"] . "./path";
/*La dimensione massima è settata su 2MB come nel file php.ini*/
$max_document_size=2000000;
/*Pagina che contiene il form per l'inserimento di un articolo*/
$upload_page='insert.php';
/* Eventuale nuovo nome da dare al file uploadato*/
$nuovo_nome = "";
/* Se $nuovo_nome è vuota, il nome sarà lo stesso del file
uploadato*/
$file_name = ($nuovo_nome) ? $nuovo_nome : $_FILES["upfile"]["name"];
$messaggioerrore=false;
do{
    /*Il campo del file esiste?*/
    if(!isset($_FILES['upfile'])){
        $messaggioerrore='Il modulo non è stato inviato
integralmente.';
        break;
     }
    else{
       $upfile=$_FILES['upfile'];
    }
    /*Controllo i possibili errori nell'upload*/
    switch ($upfile['error']){
       /*Il file inviato eccede le dimensioni specificate nel parametro
upload_max_filesize di php.ini*/
       case UPLOAD_ERR_INI_SIZE:
           $messaggioerrore='Le dimensioni del file sono eccessive: '.
                                   "non si possono superare i
$max_document_size byte.";
           break 2;
      /* Upload eseguito parzialmente*/
     case UPLOAD_ERR_PARTIAL:
         $messaggioerrore='Errore in fase di caricamento del file: '.
                                "si prega <a href='{$upload_page}'>di
riprovare</a>";
         break 2;
     /*Non effettuo controlli su errori di tipo UPLOAD_ERR_NO_FILE in
quanto
       un utente può scegliere di non inserire alcun file nel form
presente
       in insert.php*/
     }
}while(0);
/*Se non ho messaggi d'errore vado avanti*/
if(!$messaggioerrore){
/*Questa è semplicemente una prova per vedere se riesco a capire se il
file è presente oppure no. Quando scelgo un file già presente nella
directory viene ignorato e me lo sovrascrive lo stesso. Perchè? Dove
sbaglio??*/
if(file_exists($_FILES['upfile']['name']))
   die("File esistente");
  /*Rimuovo gli spazi (ed altri caratteri),mediante la funzione trim(),
all'inizio e alla fine del nome originale
   del file sulla macchina dell'utente ($_FILES["upfile"]["name"]*/
  if(trim($_FILES["upfile"]["name"]) != "") {
  /*Controllo che il file sia stato inviato col metodo HTTP POST*/
  if(is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
  /*Se il file è stato correttamente caricato move_uploaded_file
restituisce true
    ed il file verrà spostato nella sua destinazione.*/
   move_uploaded_file($_FILES["upfile"]["tmp_name"],
"$upload_dir/$file_name")
       or die("Impossibile spostare il file, controlla l'esistenza o i
permessi della directory
                dove fare l'upload.");
  }
  echo "L'upload del file " . $_FILES["upfile"]["name"] . " è avvenuto
correttamente."."<br>";
 /*Preparo il nome del file per inserirlo successivamente nella bd*/
  $nome_fin=$_FILES["upfile"]["name"];
  $ar=array('./Articoli', $nome_fin);
  $nome_finale=implode("/", $ar);
  }
  else{
  /*Se non c'è nessun file il nome_finale da inserire nella bd sarà
semplicemente 'Nessuno'*/
  $nome_finale="Nessuno";
  }
}
In sostanza dal codice si capisce che non riesco neanche a fare il
controllo per vedere se il file è presente oppure no. Mi scuso del
tempo che vi faccio perdere ma per favore aiutatemi perchè non so come
venirne fuori.
Grazie ancora
Faby

credo sia questo...
tu vai a controllare se il file esiste nella directory corrente
if(file_exists($_FILES['upfile']['name']))
ma poi vai a spostare il file temporaneo in un altra directory
move_uploaded_file($_FILES["upfile"]["tmp_name"],"$upload_dir/$file_name")
prova a fare:
if(file_exists("$upload_dir/$file_name"))

Funziona :) Ora provo ad andare avanti da sola... ma credo che avrò
ancora bisogno di qualche spiegazione.
Grazie mille della pazienza e dell'aiuto.
Faby

Grazie mille della pazienza e dell'aiuto.
de nada ;)  Ciao