4

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

例如,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']));
4

5 回答 5

9

尝试类似:

$fullpath = 'images/1086_002.jpg';
$additional = '1';

while (file_exists($fullpath)) {
    $info = pathinfo($fullpath);
    $fullpath = $info['dirname'] . '/'
              . $info['filename'] . $additional
              . '.' . $info['extension'];
}
于 2012-04-04T16:25:01.010 回答
2

为什么不只是在文件名上附加一个时间戳?这样您就不必担心已多次上传的文件的任意长文件名。

于 2012-04-04T16:22:31.743 回答
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']));

我希望这有帮助

谢谢

:)

于 2012-04-04T16:35:45.367 回答
1

我觉得这样会更好。它将有助于跟踪同名文件的上传次数。如果找到具有相同名称的文件,它的工作方式与 Windows 操作系统重命名文件的方式相同。

工作原理:如果媒体目录有一个名为002.jpg的文件,并且您尝试上传同名文件,它将被保存为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);
于 2013-08-06T17:52:41.670 回答
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']));
于 2012-04-04T16:23:09.097 回答