1

如果服务器上已存在图像名称,我将使用以下代码格式更改图像名称。如果它们已经以相同的名称存在,我想要增量图像名称。

例如:abc.pngabc_1.pngabc_2.png

function file_newname($path, $filename){
    if ($pos = strrpos($filename, '.')) {
       $name = substr($filename, 0, $pos);
       $ext = substr($filename, $pos);
    } else {
       $name = $filename;
    }

    $newpath = $path.'/'.$filename;
    $newname = $filename;
    $counter = 1;
    while (file_exists($newpath)) {
       $newname = $name .'_'. $counter . $ext;
       $newpath = $path.'/'.$newname;
       $counter++;
    }

    return $newname;
}

如果图像名称为abc.png ,则上述代码有效。如果服务器上已经有一个名为abc_1.png的图像,我运行它生成图像格式为abc_1_1.png. 预期输出:如果已经存在abc_1.png并且我运行代码$newname应该返回abc_2.png。我怎样才能实现它?

4

1 回答 1

0

您只需要检查字符串以什么结尾,无需为此使用正则表达式。利用弱类型并is_numeric查找任何先前计数器的值。

function file_newname($path, $filename){
    if ($pos = strrpos($filename, '.')) {
        $name = substr($filename, 0, $pos);
        $ext = substr($filename, $pos);
    } else {
        $name = $filename;
    }

    $newpath = $path.'/'.$filename;
    $newname = $filename;
    // New code here:
    if(file_exists($newpath)){
        $counter = 1;
        if($pos = strrpos($name, '_')) {
            $oldcounter = substr($name, $pos + 1);
            if(is_numeric($oldcounter)){
                $counter = $oldcounter + 1;
                $name = substr($name, 0, $pos);
            }
        }
        $newname = $name . '_' . $counter . $ext;
        $newpath = $path . '/' . $newname;

        while (file_exists($newpath)) {
            $newname = $name .'_'. $counter . $ext;
            $newpath = $path.'/'.$newname;
            $counter++;
        }
    }

    return $newname;
}

我已经稍微简化了功能,所以我可以把它变成一个活生生的例子,但是如果你想玩我添加的替换部分中的代码,你可以在这里查看:http: //ideone.com/ xR1v0j只需修改 的初始值,$name看看它将如何对不同的输入做出反应。

于 2015-12-03T15:24:32.637 回答