如果已存在则增加图像名称
Increment image name if already exists
我正在使用以下代码格式来更改服务器上已存在的图像名称。如果它们已经存在同名,我想要增量图像名称。
例如:abc.png、abc_1.png、abc_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
应该 return abc_2.png。我该如何实现?
您只需要检查字符串以什么结尾,无需为此使用正则表达式。利用弱类型和 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
的初始值即可查看它对不同输入的反应。
我正在使用以下代码格式来更改服务器上已存在的图像名称。如果它们已经存在同名,我想要增量图像名称。
例如:abc.png、abc_1.png、abc_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
应该 return abc_2.png。我该如何实现?
您只需要检查字符串以什么结尾,无需为此使用正则表达式。利用弱类型和 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
的初始值即可查看它对不同输入的反应。