2012-04-04 41 views
4

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

例如,我上传一个图片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'])); 
+1

php文件上传不经过$ _POST。他们通过$ _FILES并且具有与其他任何表单字段完全不同的处理语义。 – 2012-04-04 16:32:24

回答

9

试着这么做:

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

while (file_exists($fullpath)) { 
    $info = pathinfo($fullpath); 
    $fullpath = $info['dirname'] . '/' 
       . $info['filename'] . $additional 
       . '.' . $info['extension']; 
} 
+2

+1 [[pathinfo]](http://php.net/pathinfo) – hakre 2012-04-04 16:26:33

+0

+1,我打算写一些类似的东西,但是它的效果和它可以得到的一样好。 – Jon 2012-04-04 16:36:09

+0

这个脚本会导致无限循环.... – Baba 2012-04-04 16:37:56

2

为什么不直接在文件名上追加时间戳呢?然后,您不必担心已经上传多次的文件的任意长文件名。

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'])); 
+1

但请不要使用该代码;) – hakre 2012-04-04 16:25:04

+0

我刚刚使用了OP提供的内容。 – jasonlfunk 2012-04-04 16:25:55

+1

我知道,就是这一点。 – hakre 2012-04-04 16:27:04

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

我希望这有助于

感谢

:)

+0

另请参阅在http http:// whats-online中重命名图像的简单方法。信息/科学和教程/ 90 /重命名后图像文件 - 如果-IT-存在前方的上传功能于PHP / – 2016-12-11 04:06:33

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);