2013-07-24 31 views
0

需要複製,然後如果它已經存在我需要複製,然後重命名文件的副本,如果它已經存在

$pastaTemp = $_FILES['imagem_principal']['tmp_name']; 
$pastaUpload = $_SERVER['DOCUMENT_ROOT']."/casaunica/imagens/acabamentos/"; 
$arquivo = $pastaUpload . $_FILES['imagem_principal']['name']; //filename.jpg 

if(!file_exists($pastaUpload. $_FILES['imagem_principal']['name'])){ 
     $arquivo = $pastaUpload . $_FILES['imagem_principal']['name']; 
} else { 
    $nome_arquivo = explode(".",$_FILES['imagem_principal']['name']); 
     do { 
      $para = $nome_arquivo[0]."_".$i.".".$nome_arquivo[1]; 
      $nome_novo = rename($arquivo, $pastaUpload . $para); 
      $arquivo = $pastaUpload .$nome_novo; 
      $i++; 
     } while(file_exists($pastaUpload.$_FILES['imagem_principal']['name'])); 
} 

輸出重命名文件的副本:filename.jpg_1

它應該是:文件名_2.jpg

它不能取代舊文件..這就是爲什麼我需要重新命名一個數字 它不需要在一個循環中,但每次上傳一個文件

+0

看起來像爆炸是不是你想要的方式 – StephenTG

+0

爆炸的作品,也許重命名功能是錯誤的,或者我應該使用另一個功能 –

+0

你有沒有嘗試echo $ para?這條線似乎是問題的最顯而易見的根源,雖然我看不到任何特別錯誤 – StephenTG

回答

1

試試這個代碼,讓我知道,如果它的工作原理

功能

<?php 
    function recursive_naming($file, $i = 1) { 
    $dirname = dirname($file).DIRECTORY_SEPARATOR; 
    $filename = pathinfo($file, PATHINFO_FILENAME); 
    $extension = pathinfo($file, PATHINFO_EXTENSION); 

    if (!file_exists($file)) { 
     return $file; 
    } 
    $filename = preg_replace('/_\d+$/', '', $filename); 
    $file = $dirname.$filename."_".$i.".".$extension; 
    $i++; 
    return recursive_naming($file, $i); 
    } 
?> 

例子:

<?php 
    $pastaTemp = $_FILES['imagem_principal']['tmp_name']; 
    $pastaUpload = $_SERVER['DOCUMENT_ROOT']."/casaunica/imagens/acabamentos/"; 
    $arquivo  = recursive_naming($pastaUpload.$_FILES['imagem_principal']['name']); 
?> 

它將輸出filename_2.jpg如果filename.jpg存在,或者filename_3.jpg如果filename_2.jpg也存在,等等...

+0

它現在工作。 。謝謝 –

+0

隨時歡迎:) – bystwn22

+0

可以幫助我嗎? http://stackoverflow.com/questions/17796927/preg-replace-for-words-containing-space-doesnt-work –

相關問題