如何检查文件名是否存在,重命名文件?
例如,如果文件存在,我上传图片1086_002.jpg
,将文件重命名为1086_0021.jpg
并保存,如果存在1086_0021.jpg
,则重命名1086_00211.jpg
并保存,如果存在1086_00211.jpg
,请重命名1086_002111.jpg
并保存...
以下是我的代码,只有在1086_002.jpg
存在时才能执行,将文件重命名为1086_0021.jpg
,也许应该做一个foreach,但是如何?
//$fullpath = 'images/1086_002.jpg';
if(file_exists($fullpath)) {
$newpieces = explode(".", $fullpath);
$frontpath = str_replace('.'.end($newpieces),'',$fullpath);
$newpath = $frontpath.'1.'.end($newpieces);
}
file_put_contents($newpath, file_get_contents($_POST['upload']));
答案 0 :(得分:9)
尝试类似:
$fullpath = 'images/1086_002.jpg';
$additional = '1';
while (file_exists($fullpath)) {
$info = pathinfo($fullpath);
$fullpath = $info['dirname'] . '/'
. $info['filename'] . $additional
. '.' . $info['extension'];
}
答案 1 :(得分:2)
为什么不在文件名上附加时间戳?然后,您不必担心已经多次上传的文件的任意长文件名。
答案 2 :(得分:1)
我希望这会有所帮助
$fullPath = "images/1086_002.jpg" ;
$fileInfo = pathinfo($fullPath);
list($prifix, $surfix) = explode("_",$fileInfo['filename']);
$x = intval($surfix);
$newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT) . $fileInfo['extension'];
while(file_exists($newFile)) {
$x++;
$newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT) . $fileInfo['extension'];
}
file_put_contents($newFile, file_get_contents($_POST['upload']));
我希望这有助于
由于
:)
答案 3 :(得分:1)
我觉得这会更好。它将帮助跟踪上载具有相同名称的文件的次数。它的工作方式与Windows操作系统重命名文件的方式相同,如果它找到一个具有相同名称的文件。
工作原理:如果媒体目录中有一个名为 002.jpg 的文件,并且您尝试上传同名文件,则会将其另存为< strong> 002(1).jpg 上传同一文件的另一次尝试会将新文件保存为 002(2).jpg
希望它有所帮助。
$uploaded_filename_with_ext = $_FILES['uploaded_image']['name'];
$fullpath = 'media/' . $uploaded_filename_with_ext;
$file_info = pathinfo($fullpath);
$uploaded_filename = $file_info['filename'];
$count = 1;
while (file_exists($fullpath)) {
$info = pathinfo($fullpath);
$fullpath = $info['dirname'] . '/' . $uploaded_filename
. '(' . $count++ . ')'
. '.' . $info['extension'];
}
$image->save($fullpath);
答案 4 :(得分:0)
您可以将if
语句更改为while
循环:
$newpath = $fullpath;
while(file_exists($newpath)) {
$newpieces = explode(".", $fullpath);
$frontpath = str_replace('.'.end($newpieces),'',$fullpath);
$newpath = $frontpath.'1.'.end($newpieces);
}
file_put_contents($newpath, file_get_contents($_POST['upload']));