2013-09-24 26 views
3

我這個PHP代碼:重命名一個文件,如果已存在 - PHP上傳系統

<?php 

// Check for errors 
if($_FILES['file_upload']['error'] > 0){ 
    die('An error ocurred when uploading.'); 
} 

if(!getimagesize($_FILES['file_upload']['tmp_name'])){ 
    die('Please ensure you are uploading an image.'); 
} 

// Check filesize 
if($_FILES['file_upload']['size'] > 500000){ 
    die('File uploaded exceeds maximum upload size.'); 
} 

// Check if the file exists 
if(file_exists('upload/' . $_FILES['file_upload']['name'])){ 
    die('File with that name already exists.'); 
} 

// Upload file 
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], 'upload/' . $_FILES['file_upload']['name'])){ 
    die('Error uploading file - check destination is writeable.'); 
} 

die('File uploaded successfully.'); 

?> 

,我需要表現得像一個「窗口」的對待現有文件的 - 我的意思是,如果該文件存在,我希望它被改爲文件名後面的數字1。

例如:myfile.jpg已經存在,所以,如果你再次上傳這將是myfile1.jpg,如果myfile1.jpg存在,這將是myfile11.jpg等等...

我該怎麼辦?我嘗試了一些循環,但不幸沒有成功。

+0

[用php的文件夾重命名中的重複文件]中可能重複(http://stackoverflow.com/questions/11068093/renaming-duplicate-files-in- a-folder-with-php) –

回答

11

你可以做這樣的事情:

$name = pathinfo($_FILES['file_upload']['name'], PATHINFO_FILENAME); 
$extension = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION); 

// add a suffix of '1' to the file name until it no longer conflicts 
while(file_exists($name . '.' . $extension)) { 
    $name .= '1'; 
} 

$basename = $name . '.' . $extension; 

爲了避免很長的名字,它很可能是整潔追加一個數字,例如file1.jpgfile2.jpg等:

$name = pathinfo($_FILES['file_upload']['name'], PATHINFO_FILENAME); 
$extension = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION); 

$increment = ''; //start with no suffix 

while(file_exists($name . $increment . '.' . $extension)) { 
    $increment++; 
} 

$basename = $name . $increment . '.' . $extension; 
+1

我該怎麼做? :) –

+0

我已經添加了一個例子。 –

+0

Mr.George,我嘗試了你的第二個代碼,在$ increment ++中沒有工作。你能幫我在這個 – 2016-07-21 12:23:37

0
  1. 您上傳了一張名爲demo.png文件。
  2. 您試圖上傳相同的文件demo.png並將其重命名爲demo2.png
  3. 當您嘗試第三次上載demo.png時,它會再次被重命名爲demo1.png並替換您在(2)中上傳的文件。

,所以你不會找到demo3.png

相關問題