php检查文件名存在,重命名该文件

时间:2012-04-04 16:19:20

标签: php file-exists

如何检查文件名是否存在,重命名文件?

例如,如果文件存在,我上传图片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']));

5 个答案:

答案 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']));