2016-10-12 5 views
-2

アップロードされたファイルの名前を変更したい場合は、その名前を変更します。私はそれがimg1.jpg、img2.jpgに既に存在するならそれに名前を変えたいと思う。私は多くの例を試してみましたが、何も以下のこのコードに合っていない:上記のコードでは、ファイルexisitsのためのいくつかのアップデートが必要ファイルがすでに存在する場合は名前を変更します-phpファイルのアップロード

<?php 
 
$valid_formats = array(
 
    "jpg", 
 
    "png", 
 
    "gif", 
 
    "zip", 
 
    "bmp", 
 
    "pdf", 
 
    "docx", 
 
    "PDF", 
 
    "xlxc" 
 
); 
 
$max_file_size = 3024; 
 
$path   = "images/"; // Upload directory 
 
$count   = 0; 
 

 
if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { 
 
    $fname = $_FILES['attach']['name']; 
 
    foreach ($_FILES['attach']['name'] as $f => $name) { 
 
     if ($_FILES['attach']['error'][$f] == 4) { 
 
      continue; 
 
     } 
 
     
 
     if ($_FILES['attach']['error'][$f] == 0) { 
 
      if ($_FILES['attach']['size'][$f] > $max_file_size) { 
 
       $message[] = "$name is too large!."; 
 
       continue; 
 
      } 
 
      
 
      elseif (!in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)) { 
 
       $message[] = "$name is not a valid format"; 
 
       continue; 
 
      } 
 
      
 
      else { 
 
       if (move_uploaded_file($_FILES["attach"]["tmp_name"][$f], $path . $name)) 
 
        $count++; 
 
       
 
      } 
 
     } 
 
    } 
 
    
 
} 
 
?>

+1

あなたの質問は正確ですか?私たちは「私の宿題をやってください」というスタイルの質問を好きではありません。何かエラーがありますか?何が効果があり何が効果がありませんか?あなたのコードスニペットには、多くのバリデーションが含まれています。あなたの質問では省略することができます。 –

+0

'file_exists'を使ってファイルやディレクトリが存在するかどうかを確認します – ravisachaniya

+0

なぜ名前を変更していますか...元のファイルを上書きしないようにしてください – madankundu

答えて

0

これを試してみてください:

before moving the file to server put this check 

$fname = $_FILES['attach']['name']; 
if(file_exist($path)) 
{ 
    $file = explode($fname); // explode file name and extension 

    $rand = rand(1, 100); 
    $fname = $file[0].'.'.$rand.$file[1]; // combine file name with some random value with extension 
} 

// Now fname will contain the original name or modifed name in it 
// You can maintain a counter instead of random value that gives you 1,2,3 ... 
0

あなたは

else { 

    $targetfile = $path . $name; 

    if(file_exists($targetfile)){ 

     /* get filename & extension from target file */ 
     $filename=pathinfo($targetfile, PATHINFO_FILENAME); 
     $extension=pathinfo($targetfile, PATHINFO_EXTENSION); 

     /* if the last character of the file's name is a digit, increment by one */ 
     $lastchar = intval(substr($filename, strlen($filename)-1)); 

     if($lastchar && !is_nan($lastchar)) { 
      /* Get the actual integer value from the end of the filename */ 
      preg_match('@\[email protected]', $filename, $matches); 
      if(!empty($matches)) $lastchar=$matches[0]; 

      /* Remove original number and replace with new incremented value */ 
      $filename = substr($filename, 0, strlen($filename) - strlen($lastchar)) . ($lastchar + 1); 

     } else { 
      /* last character was not a digit, add '1' to filename */ 
      $filename.='1'; 
     } 

     /* determine new file's path */ 
     $targetfile = $path . $filename . '.' . $extension; 

     clearstatcache(); 
    } 

    if(move_uploaded_file($_FILES["attach"]["tmp_name"][$f], $targetfile)) $count++; 
} 

else{ 
    if(move_uploaded_file($_FILES["attach"]["tmp_name"][$f], $path.$name)) 
    $count++; 

} 

を交換してみてくださいそれは、ファイルが既に指定されたターゲットフォルダに存在するかどうかを決定しなければならない - それがない場合その名前の最後の部分として整数を持ち、その値を1だけ増やして新しいfを作成する必要がありますilename。整数がない場合、単に '1'を追加する必要がありますが、ファイルが存在しない場合は、元の名前を使用します。

関連する問題