2013-04-21 19 views
13

Sto provando a rinominare il nome file di un'immagine quando è caricata se esiste, diciamo se il mio nome file è test.jpg ed esiste già Voglio rinominarlo come test1.jpg e quindi test2.jpg e così via. Con il codice che ho scritto è stato cambiato il mio nome di file come test1.jpg e poi test12.jpg qualsiasi consiglio su come risolvere questo sarebbe un grande ringraziamento!PHP Rinomina Nome file se esiste Aggiungi numero alla fine

PHP

$name = $_FILES['picture']['name']; 
$actual_name = pathinfo($name,PATHINFO_FILENAME); 
$extension = pathinfo($name, PATHINFO_EXTENSION); 

$i = 1; 
while(file_exists('tmp/'.$actual_name.".".$extension)) 
{   
    $actual_name = (string)$actual_name.$i; 
    $name = $actual_name.".".$extension; 
    $i++; 
} 
+0

chiaro il $ actual_name variabile, una volta utilizzato, perché la sua un ciclo facendo qualche cosa di simile, $ acutal_name = '' –

+0

Si potrebbe verificare il nome con '$ I' nel while' ciclo' .. come in '" tmp /".$ actual_name. $ i. ".". $ extension' e crea il valore '$ nome' dopo il ciclo while' $ name = "tmp /".$ actual_name. $ i.". ". $ extension' – dbf

risposta

30

Ecco una piccola modifica che penso dovrebbe fare quello che vuoi:

$actual_name = pathinfo($name,PATHINFO_FILENAME); 
$original_name = $actual_name; 
$extension = pathinfo($name, PATHINFO_EXTENSION); 

$i = 1; 
while(file_exists('tmp/'.$actual_name.".".$extension)) 
{   
    $actual_name = (string)$original_name.$i; 
    $name = $actual_name.".".$extension; 
    $i++; 
} 
0

Ci sono diversi modi per rinominare immagine in PHP prima di caricare sul server. aggiungendo timestamp, ID univoco, dimensioni delle immagini più numero casuale etc.You possono vederli tutti here

In primo luogo, Controllare se il nome del file immagine esiste nella cartella immagini ospitata altrimenti caricarlo. Il ciclo while controlla se esiste il nome del file immagine e aggiunge un ID univoco come mostrato di seguito ...

function rename_appending_unique_id($source, $tempfile){ 

    $target_path ='uploads-unique-id/'.$source; 
    while(file_exists($target_path)){ 
     $fileName = uniqid().'-'.$source; 
     $target_path = ('uploads-unique-id/'.$fileName); 
    } 

    move_uploaded_file($tempfile, $target_path); 

} 

if(isset($_FILES['upload']['name'])){ 

    $sourcefile= $_FILES['upload']['name']; 
    tempfile= $_FILES['upload']['tmp_name']; 

    rename_appending_unique_id($sourcefile, $tempfile); 

} 

Controlla immagine renaming tactics

3

Ispirato da @ Jason risposta, ho creato una funzione che ho ritenuto più breve e un formato di file più leggibile.

function newName($path, $filename) { 
    $res = "$path/$filename"; 
    if (!file_exists($res)) return $res; 
    $fnameNoExt = pathinfo($filename,PATHINFO_FILENAME); 
    $ext = pathinfo($filename, PATHINFO_EXTENSION); 

    $i = 1; 
    while(file_exists("$path/$fnameNoExt ($i).$ext")) $i++; 
    return "$path/$fnameNoExt ($i).$ext"; 
}