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