2013-04-21 6 views
13

Ich versuche, den Dateinamen eines Bildes umzubenennen, wenn es hochgeladen wird, wenn es existiert, sagen, wenn mein Dateiname test.jpg ist und es bereits existiert Ich möchte es als test1.jpg umbenennen und dann test2.jpg und so weiter. Mit dem Code, den ich geschrieben habe, ändert sich mein Dateiname wie folgt test1.jpg und dann test12.jpg jeder Ratschlag zur Fehlerbehebung wäre super danke!PHP Rename Dateiname, wenn vorhanden Anfügen Nummer zum Ende

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

klar die Variable $ actual_name einmal, weil seine verwendet eine Schleife durch einige, was wie dies zu tun, $ acutal_name = ‚‘ –

+0

könnten Sie den Namen testen mit '$ I' im' while' Schleife .. wie in '" tmp /".$ actual_name. $ i. ".". $ extension "und erstelle den Wert' $ name' nach der while-Schleife '$ name =" tmp /".$ actual_name. $ i. ".". $ Verlängerung' – dbf

Antwort

30

Hier ist eine kleine Änderung, die ich denke, sollte das tun, was Sie wollen:

$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

Es gibt mehrere Möglichkeiten für in PHP Umbenennung Bild vor auf den Server hochgeladen. Zeitstempel anhängen, eindeutige ID, Bildmaße plus Zufallszahl etc.Sie können sie alle sehen here

Überprüfen Sie zunächst, ob der Bilddateiname im gehosteten Bildordner vorhanden ist, andernfalls laden Sie ihn hoch. Die while-Schleife prüft, ob der Bilddateiname existiert und fügt eine eindeutige ID, wie unten gezeigt ...

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); 

} 

abfragen Bild renaming tactics

3

Inspiriert von @ Jason Antwort, habe ich eine Funktion, die ich kürzer als und besser lesbares Dateinamenformat.

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"; 
}