2015-03-31 111 views
0

我有一個代碼,可以像在Windows系統中一樣更改圖像名稱。如果有像cup.jpg這樣的圖片,代碼會將名稱更改爲cup0.jpg。多圖像上傳,如果圖像已經存在,則更改名稱

然而,問題是當我從數組中上傳許多圖像,並且只有一些圖像已經存在並需要更改名稱時。

需要對多個文件進行哪些更改?

for($i=0; $i<count($_FILES['upload']['name']); $i++) { 
    $target_file = $target_dir . basename($_FILES["upload"]["name"][$i]); 
    $images[] = basename($_FILES['upload']['name'][$i]); 
} 
if (file_exists($target_file)) { 
    $i = 0; 
    echo " Image exists, changing name."; 
    while (file_exists($target_file)) { 
    $extension = pathinfo($target_file, PATHINFO_EXTENSION); 
    $filename = pathinfo($target_file, PATHINFO_FILENAME); 
    $new_filename = $filename . $i . $iterator . '.' . $extension; 
    $target_file = $target_dir . $new_filename; 
    $i++; 
    $images[] = $new_filename; 
    } 
} 

我嘗試添加一個循環,但如果陣列由新的圖像和已經存在的圖像,所以只有部分圖像需要他們的名字改變了代碼不起作用。

回答

0

這裏是你去:

$images = array(); 
for($i=0; $i<count($_FILES['upload']['name']); $i++) { 
    getUniqueName(basename($_FILES["upload"]["name"][$i]),$images); 
} 

function getUniqueName ($name, &$images) { 
    $i = 0; 
    $extension = pathinfo($name, PATHINFO_EXTENSION); 
    $filename = pathinfo($name, PATHINFO_FILENAME); 

    while (in_array($name, $images)) { 
     $name = $filename . $i . '.' . $extension; 
     $i++; 
    } 
    /* Need to define $target_dir here */ 
    $i=0; 
    while (file_exists($target_dir.$name)) { 
     $name = $filename . $i . '.' . $extension; 
     $i++; 
    } 
    $images[]= $target_dir.$name; 
    } 
+0

我得到了一個空白頁面沒有任何與此錯誤消息,但我會嘗試玩這個周圍的代碼看起來是正確的。 – Santona 2015-04-01 07:50:24

+0

請啓用您的錯誤報告,讓我知道錯誤。謝謝 – Samir 2015-04-01 07:56:50

+0

問題是服務器有錯誤報告,它不能改變。 – Santona 2015-04-01 15:37:35