2013-04-21 50 views
13

Tôi đang cố đổi tên tệp của hình ảnh khi nó được tải lên nếu nó tồn tại, giả sử tên tệp của tôi là test.jpg và nó đã tồn tại tôi muốn đổi tên thành test1.jpg và sau đó test2.jpg v.v. Với mã tôi đã viết nó thay đổi tên tập tin của tôi như vậy test1.jpg và sau đó test12.jpg bất kỳ lời khuyên về việc sửa chữa này sẽ là tuyệt vời cảm ơn!Đổi tên PHP Tên tệp nếu có Thêm số điện thoại để kết thúc

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

rõ ràng biến $ actual_name từng được sử dụng bởi vì nó là một vòng lặp bằng cách thực hiện một số điều như thế này, $ acutal_name = '' –

+0

Bạn có thể kiểm tra tên với '$ i' trong' while' loop .. như trong '" tmp /".$ actual_name. $ i. ".". $ extension' và tạo giá trị '$ name' sau vòng lặp while' $ name = "tmp /".$ actual_name. $ i.". ". $ extension' – dbf

Trả lời

30

Dưới đây là một thay đổi nhỏ mà tôi nghĩ rằng nên làm những gì bạn muốn:

$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

Có một số cách để đặt tên nhiều hình ảnh trong PHP trước khi tải lên máy chủ. thêm dấu thời gian, id duy nhất, kích thước hình ảnh cộng với số ngẫu nhiên, v.v. Bạn có thể xem tất cả các số here

Trước tiên, hãy kiểm tra xem tên tệp hình ảnh có tồn tại trong thư mục hình ảnh được lưu trữ hay không. Vòng lặp kiểm tra trong khi nếu tên tập tin hình ảnh tồn tại và gắn thêm một id duy nhất như hình dưới đây ...

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

} 

Kiểm tra nhiều hình ảnh renaming tactics

3

Lấy cảm hứng từ @ Jason câu trả lời, tôi đã tạo ra một chức năng mà tôi coi là ngắn hơn và định dạng tên tệp dễ đọc hơn.

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