2013-04-21 28 views
13

我想重新命名图片的文件名称时,如果它存在,说如果我的文件名是test.jpg,它已经存在我想将其重命名为test1.jpg然后test2.jpg等等。随着代码我写它改变我的文件名如test1.jpg然后test12.jpg任何意见修复这将是非常感谢!PHP重命名文件名如果存在追加数字结束

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

明确的一次,因为它做一些什么像这样的循环中使用的变量$ actual_name,$ acutal_name =“” – 2013-04-21 21:47:57

+0

你可以在'while'回路测试用'$ i'名字..在''tmp /".$ actual_name。$ i。“。”。$ extension'并在while循环'$ name =“tmp /".$ actual_name。$ i。”。“后创建值'$ name'。 $ extension' – dbf 2013-04-21 21:49:27

回答

30

这里有一个小的修改,我认为应该做你想要什么:

$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

有上传到服务器之前在PHP中重命名图像的几种方法。 附加时间戳,唯一ID,图片的尺寸加上随机数etc.You可以看到他们所有here

首先,检查是否在托管的图片文件夹中存在图像文件名,否则上传。循环检查,而如果图像文件名存在,并附加一个唯一的ID,如下图所示...

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

} 

检查更多的图像renaming tactics

3

从@Jason回答启发,我创建了我认为是较短的函数和更易读的文件名格式。

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"; 
} 
相关问题